sábado, 2 de noviembre de 2013

Magic quotes en PHP

Buenas a todos!!
Os voy a hablar sobre Magic quotes, de hecho si habéis llegado hasta aquí, con toda probabilidad lo que queréis es desactivarlas!! (y casi seguro ya habéis perdido algún tornillo por el camino)

Magic quotes es el mecanismo automático por el que PHP transforma cadenas que contengan comillas en cadenas donde las comillas están escapadas con barras, os pongo en situación:

El cliente envía por ejemplo una petición al servidor con una variable llamada json y transferida mediante post:

json={"id":"1","name":"Magic Quotes"}

En el servidor recogéis este json de la siguiente forma:

$obj = json_decode($_POST["json"]);

Y accedéis a los valores así:

echo $obj->{'id'};
echo $obj->{'nombre'};

Esto es perfecto, porqué en local con seguramente no tenéis magic quotes activado... Ahora bien!! Muchos servidores php de producción por cuestiones de seguridad tienen activada esta opción, y es cuando vuestros servicios json dejan de funcionar, y no sabéis por qué razón en concreto.

Hay varias formas de desactivar Magic quotes, mediante el .htaccess o mediante el php.ini. El problema es que no siempre tendréis acceso a estos ficheros y realmente por seguridad es mejor que no desactivéis esta opción. 
Pero php proporciona una función muy simple para poder regenerar el string al que se han añadido los carácteres de escape para las comillas, stripslashes(str):

$obj = json_decode(stripslashes($_POST["json"]));

Haciendo esto conseguimos obtener correctamente el json, no se genera ningún error, y magic quotes sigue activado.

Espero que os sirva de ayuda, si tenéis cualquier duda mandad comentarios!

Un saludete a todos!