Re: [PHP-ES] str_replace y $_POST
[email protected] (Juan Manuel Acuña Barrera)
| Newsgroups | php.general.es |
|---|---|
| Message-ID | <[email protected]> |
El 30/07/2010, a las 17:31, José Yepes escribió:
> A mi se me ocurren dos formas:
>
> 1 - Usa un ciclo foreach, recorriendo el array $quitar, para buscar cada uno
> de estos caracteres y quitarlo
>
> EJEMPLO
>
> $fragmento = $_POST["dir"];
>
> foreach($quitar as $noValido)
> {
> if(strpos($fragmento, $noValido) !== FALSE)
> {
> $fragmento = str_replace($noValido, "", $fragmento);
> }
> }
>
> O la segunda, que te evita el uso de ciclos: usa strtr(), ya que hace
> reemplazos
> en base a un arreglo de reemplazos que le mandes. Para esto harías una
> modificacion a tu arreglo, como la mostraré a continuación;
>
> $quitar= array("-"=>"", " "=>"", "'"=>"", "?"=>"", "+"=>"", "-"=>"",
> "_"=>"",
> "^"=>"", "*"=>"", "!"=>"", "%"=>"", "¿"=>"", "¡"=>"", "¨"=>"","´"=>"",
> "ç"=>"",
> "{"=>"", "}"=>"", ":"=>"", "."=>"", ";"=>"", "("=>"", ")"=>"", "#"=>"",
> "|"=>"", "&"=>"",
> "$"=>"", "="=>"", "<"=>"", ">"=>""); //caracteres a Eliminar
>
> Con esto, la funcion strtr() usa los indices del arreglo de reemplazo como
> los
> caracteres a buscar, y los valores del arreglo como los reemplazos que
> quieras
> hacer ;) sólo restaría hacer esto:
>
> $fragmento = $_POST["dir"];
>
> $fragmento = strtr($fragmento, $quitar);
>
>
>
> Espero que esto resuelva tu problema. Un gran saludo para tí.
>
>
>
>
> El 30 de julio de 2010 16:42, hahmael <[email protected]> escribió:
>
>> Hola a todos recibo por post una serie de numero a veces con caracteres que
>> no deseo, estoy tratando de utilizar str_replace para reemplazar esos
>> caracteres o eliminarlos antes de hacer la insercion a la BD pero hasta el
>> momento mis intentos han sido infructuosos, me gustaria alguien me diga si
>> estoy cometiendo un error, ejemplo de codigo:
>>
>>
>> ######### Recibo por POST la siguiente cadena --> 44"#B 8 <--- y
>> solo
>> deseo dejar letras y numeros
>>
>> ######### Hago array con caracteres a reemplazar
>>
>> $quitar= array("-", " ", "'", "?", "+", "-", "_", "^", "*", "!", "%", "¿",
>> "¡", "¨","´", "ç", "{", "}", ":", ".", ";", "(", ")", "#", "|", "&", "$",
>> "=", "<", ">"); //caracteres a Eliminar
>>
>>
>> ######### Finalmente trato de hacer el reemplazo buscando obtener esto --->
>> 44B8 <--- pero no lo Logro!
>>
>> $fragmento= str_replace( $quitar, "", $_POST['dir'] );
>>
>> devuelve -----> 44"#B 8
>>
>>
>> existe alguna otra alternativa?, que estoy realizando mal?, deseo eliminar
>> en una sola funcion espacios y caracteres no Numericos o Alfabeticos.
>>
>> De antemano Gracias.
>>
>> --
>> Agradecido.
>>
>> Hahmael Tâher.
>>
>
>
>
> --
> "No te esfuerzes tanto. Las mejores cosas de la vida suceden cuando menos te
> las esperas!!"
Hola Hahmael:
A ver, revisando tu código original encontré que te falta incluir en el arreglo "\"" para que te quite las comillas, poniendo eso y ordenando el arreglo, me funciona perfecto.
$cadena='44"#B 8';
echo "cadena: $cadena <br>";
$quitar= array("-",
" ",
"'",
"?",
"+",
"-",
"_",
"^",
"*",
"!",
"%",
"¿",
"¡",
"¨",
"´",
"ç",
"{",
"}",
":",
".",
";",
"(",
")",
"#",
"|",
"&",
"$",
"=",
"<",
">",
"\"");
$fragmento= str_replace( $quitar, "", $cadena );
echo "fragmento: $fragmento <br>";
Si quieres prueba lo anterior y nos dices.
Saludos!
Juan Manuel Acuña