usuario198729
Al hacer este trabajo en PHP, uno puede encontrarse con este tipo de problema:
<span title="<?php echo $variable;?>">...
El problema es que si $variable
contiene comillas dobles, debe cambiarlo a \"
Y esa no es toda la historia todavía:
<span title="<?php echo $variable;?>">...
En este caso, necesitamos cambiar las comillas simples a \'
pero deje las comillas dobles como están.
Además, los valores de las variables pueden contener corchetes angulares que interferirán con HTML.
Entonces, ¿cómo podemos escapar de forma segura de la salida de HTML?
dominic rodriguez
Siempre desea codificar en HTML las cosas dentro de los atributos HTML, lo que puede hacer con htmlspecialchars
:
<span title="<?php echo htmlspecialchars($variable); ?>">
Probablemente desee configurar el segundo parámetro ($quote_style
) a ENT_QUOTES
.
El único riesgo potencial es que $variable
puede que ya esté codificado, por lo que puede desea establecer el último parámetro ($double_encode
) a false
.
-
Confirmado con especificaciones html5 aquí: stackoverflow.com/questions/5320177/…
– e-motivo
31 de enero de 2014 a las 23:46
-
+1 por mencionar “ENT_QUOTES”. Ya estaba usando esta función, pero las comillas dobles estropearían el html.
– danielson317
17 de agosto de 2017 a las 16:55
-
Tenga en cuenta que ENT_QUOTES aún causará errores en javascript dentro de html:
–Leigh Bicknell
14 de marzo de 2019 a las 11:27
@LeighBicknell creo que es mejor hacerlo htmlspecialchars(json_encode($variable), ENT_QUOTES)
. No lo he probado en su ejemplo particular, pero creo que debería funcionar bien para cualquier tipo de valor.
– frodeborli
25 de marzo de 2021 a las 12:11
Desde PHP8.1 ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401
es el valor predeterminado.
– Tobías K.
28 de noviembre de 2022 a las 14:50
Bueno, antes de enviar cualquier texto a HTML, debe escaparlo usando htmlcaracteres especiales(). Así que solo asegúrese de que la comilla (doble) se cambie correctamente.
Preste atención al segundo parámetro de esa función.
La herramienta Bat tiene un método StringTool::htmlAttributes ($arrayOfAttributes) que también hace el trabajo.