php - texto - strip_tags wordpress
¿Las entidades con nombre en HTML siguen siendo necesarias en la era de los navegadores compatibles con Unicode? (4)
Disfrutará de PHP 6 (aunque esté lejos) que tendrá soporte Unicode. Creo que la versión 5.3 alpha posiblemente tenga algo de soporte también.
No estoy del todo seguro de cuáles son las reglas de las entidades, pero las seguiré usando. Un uso htmlentities()
de htmlentities()
es reemplazar caracteres sospechosos en la entrada del usuario. Por ejemplo, convertir <a <
y> a >
protegería la mayoría de los exploits HTML (por ejemplo, <script ...>
).
Hice un montón de programación en PHP en los últimos años y una cosa que me sigue molestando es el soporte débil para Unicode y cadenas multibyte (para estar seguro, nativamente no hay ninguno). Por ejemplo, "htmlentities" parece ser una función muy utilizada en el mundo de PHP y me pareció absolutamente molesto cuando se esforzó por mantener cada cadena localizable, solo almacenar UTF-8 en su base de datos, solo entregar UTF -8 páginas web, etc. De repente, en algún lugar entre su base de datos y el navegador está esta función irremediablemente ingenua que simula que cada byte es un personaje y lo arruina todo.
Me encantaría simplemente deshacerme de este tipo de funciones, parecen totalmente superfluas. ¿Todavía es necesario en estos días para escribir ''& auml;'' en lugar de un''? Al menos, mi Firefox parece perfectamente feliz de mostrar incluso los glifos asiáticos más extraños, siempre y cuando se sirvan en una codificación adecuada.
Actualización: para ser más precisos: se necesitan entidades con nombre para cualquier otra cosa además de mostrar etiquetas HTML (como en "& lt;" para "<")
Actualización 2:
@Konrad: ¿Estás diciendo que no, no se necesitan entidades con nombre?
@Ross: ¿Pero no sería mejor desinfectar la entrada del usuario cuando se ingresa, para mantener mi lógica de salida libre de estos problemas? (asumiendo, por supuesto, que es posible desinfectar confiablemente la entrada, pero luego, si no es así, ¿puede estar en la salida?)
Safari parece tener problemas con algunos glifos pero no con otros, puede que no sea necesario, pero probablemente sea mejor hacerlo, por supuesto, esta es mi opinión y no está respaldada por nada más que por mis propias observaciones.
Las entidades con nombre en XHTML "real" (es decir, con application/xhtml+xml
, en lugar del modo de compatibilidad de text/html
usado con mayor frecuencia) no se recomiendan. Además de los cinco definidos en el XML mismo ( <
>
&
"
, '
), todos deberían estar definidos en la DTD del DocType particular que está utilizando. Eso significa que su navegador tiene que admitir explícitamente ese DocType, que está lejos de ser un hecho. Las entidades numeradas, por otro lado, obviamente solo requieren una tabla de búsqueda para obtener el carácter Unicode correcto.
En cuanto a si necesita entidades en todos estos días: puede esperar que cualquier navegador moderno sea compatible con UTF-8. Por lo tanto, siempre y cuando pueda garantizar que la base de datos, el marcado y el servidor web acepten cumplir con eso, elimine las entidades.
Si usa XHTML, en realidad se recomienda no usar entidades con nombre ([cita requerida]). Algunos navegadores (Firefox ...), al analizar esto como XML (que normalmente no lo hacen), no leen los archivos DTD y, por lo tanto, no pueden manejar las entidades.
Como de todos modos es una buena práctica usar UTF-8 como codificación si no hay razones convincentes para hacerlo, esto solo significa que el creador de los documentos necesita un editor decente que no solo maneje los documentos sino que también proporcione una buena forma de ingresar los buzos glifos. OS X realmente no tiene este problema porque la mayoría de los glifos necesarios se pueden alcanzar a través de las teclas "alt", pero Windows no tiene esta característica.
@Konrad: ¿Estás diciendo que no, no se necesitan entidades con nombre?
Precisamente. A menos que, por supuesto, haya restricciones tontas, por ejemplo, controladores de bases de datos heredados que se ahoguen en UTF-8, etc.