25 de septiembre de 2007

PHP: Cómo convertir las " y las ' y no morir en el intento

El caso es que en el servidor Apache cuando tenemos la directiva magic_quotes_gpc activada tanto para las cookies, como para las variables envíadas vía $_POST como para las variables envías vía $_GET las " y las ' son automáticamente convertidas por el servidor añadiéndole el carácter \ para que no nos den problemas.

¿Pero qué sucede cuando esta directiva no está activada y no tenemos acceso para activarla (o no queremos por seguridad)? Pues que la cosa se complica bastante, cada formulario que enviamos puede convertirse en un calvario lleno de funciones para convertir campo a campo. En caso de no filtrarlos tenemos muchas papeletas para que aparezcan todo tipo de errores extraños.

Para evitar esto he programado una función que debe ser ejecutada cuanto más arriba de la página web mejor en la que filtro esos campos y convierto los caracteres peligrosos.

Aquí está la función:
function limpiaComillas($datos_html=array(null)){

foreach($_POST as $objeto1=>$objeto2){
$_POST[$objeto1]=trim(escapeshellcmd($objeto2), ENT_QUOTES);
if (!get_magic_quotes_gpc()){
$_POST[$objeto1] = addslashes($objeto2);
}else{
$_POST[$objeto1] = $objeto2;
}
}

foreach($_GET as $objeto1=>$objeto2){
$_GET[$objeto1]=trim(escapeshellcmd($objeto2), ENT_QUOTES);
if (!get_magic_quotes_gpc()){
$_GET[$objeto1] = addslashes($objeto2);
}else{
$_GET[$objeto1] = $objeto2;
}
if (in_array($objeto1,$datos_html)){
$_GET[$objeto1] = $objeto2;
}else{
$_GET[$objeto1] = strip_tags($objeto2);
}
}
}
limpiaComillas();


Cómo siempre blogger se ha cargado las tabulaciones del código, que le vamos a hacer :(

Comparte este Post:
Menéame Digg!

4 comentarios:

david dijo...

Para mantener las tabulaciones deberías meter el código entre los tags <pre> ... </pre>.

Gabriel Cuesta dijo...

El problema con blogger es que si las líneas son largas con <pre> el texto sale de la capa de la izquierda y se mete debajo de la columna de la derecha :(

David dijo...

Para eso están los retornos de carro :P

Gabriel Cuesta dijo...

Ya, pero si no tienes mucho tiempo y quieres poner un bloque de texto largo es una tortura. Lo suyo sería que con copiar y pegar respetase las tabulaciones.