recorrer - Escape de comillas dobles en un valor para una forma adhesiva en PHP
recorrer string php (3)
Tengo problemas para crear un formulario adhesivo que recuerde lo que se ingresa en el envío del formulario si el valor tiene comillas dobles. El problema es que el HTML debe leer algo así como:
<input type="text" name="something" value="Whatever value you entered" />
Sin embargo, si la frase: "¿Cómo hago esto?" está escrito con comillas, el HTML resultante es similar a:
<input type="text" this?="" do="" i="" how="" value="" name="something"/>
¿Cómo tendría que filtrar las comillas dobles? Lo he intentado con comillas mágicas, usé stripslashes y addslashes, pero hasta ahora no he encontrado la solución adecuada. ¿Cuál es la mejor manera de evitar este problema para PHP?
Lo anterior codificará todo tipo de caracteres que tengan código de entidad html. Prefiero usar:
htmlspecialchars($myValue, ENT_QUOTES, ''utf-8'');
Esto solo codificará:
''&'' (ampersand) becomes ''&''
''"'' (double quote) becomes ''"'' when ENT_NOQUOTES is not set.
'''''' (single quote) becomes ''''' only when ENT_QUOTES is set.
''<'' (less than) becomes ''<''
''>'' (greater than) becomes ''>''
También podría hacer un strip_tags en $ myValue para eliminar las etiquetas html y php.
Quieres htmlentities () .
<input type="text" value="<?php echo htmlentities($myValue); ?>">
Esto es lo que uso:
htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, ''UTF-8'')
-
ENT_QUOTES
le dice a PHP que convierta tanto comillas simples como dobles, lo que me parece deseable. -
ENT_SUBSTITUTE
yENT_DISALLOWED
tratan con Unicode no válido. Son bastante similares: hasta donde yo entiendo, el primero sustituye las secuencias de unidad de código no válido, es decir, caracteres codificados inválidamente o secuencias que no representan caracteres , mientras que el segundo sustituye los puntos de código no válidos para el tipo de documento dado, es decir, caracteres que no son permitido para el tipo de documento especificado (o el predeterminado si no se especifica explícitamente). La documentación es indeseablemente lacónica en ellos. -
ENT_HTML5
es el tipo de documento que uso. Puede usar uno diferente, pero debe coincidir con su doctype de página. -
UTF-8
es la codificación de mi documento. Sugiero que, a menos que esté absolutamente seguro de que esté usando PHP 5.4.0, especifique explícitamente la codificación, especialmente si va a tratar con texto que no está en inglés. Un servidor que trabajo un poco usa 5.2.algo, que por defecto esISO-8859-1
y produce galimatías.
Como sugiere thesmart , htmlspecialchars
codifica solo caracteres HTML reservados mientras que htmlentities
convierte todo lo que tiene una representación HTML. En la mayoría de los contextos, cualquiera hará el trabajo. Aquí hay una discusión sobre el tema.
Una cosa más: es una buena práctica mantener las comillas mágicas desactivadas, ya que dan una falsa sensación de seguridad y están en desuso en 5.3.0 y eliminadas de la 5.4.0. Si están habilitados, cada cita en sus campos será precedida por una barra invertida en la devolución de datos (y las devoluciones múltiples agregarán más y más barras inclinadas). Veo que el OP puede cambiar la configuración, pero para referencias futuras: si está en un host compartido o no tiene acceso a php.ini
, la forma más fácil es agregar
php_flag magic_quotes_gpc Off
al archivo .htaccess
.