2012-06-26 10 views
5

El uso de htmlspecialchars y htmlentities está causando salidas en blanco de elementos tales como un símbolo e incluso ' citas simples. Obviamente, esto es absolutamente inútil, sin embargo, la salida de los datos sin utilizar caracteres html da como resultado este símbolo para ambos . ¿Alguna razón por la que esto está ocurriendo?htmlspecialchars sacando en blanco

Este es el código que está causando el problema:

<p> 
<?php 
    echo nl2br(htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT, "UTF-8")); 
?> 
</p> 
+2

Suena como un problema de juego de caracteres. ¿Estás seguro de que tus datos están codificados con UTF-8? –

+0

Es posible que esté malinterpretando su problema, pero probé esto en ideone.com y parece funcionar bien: http://ideone.com/P298n –

+0

@ EmilVikström ¿Cómo puedo asegurarme de esto? – JimmyBanks

Respuesta

13

Esa cadena no está codificado en válida codificación UTF-8. Podría estar en otra codificación como UTF-16 o tal vez contenga algo de basura binaria que no se corresponda con ningún formato.

La conclusión es que, como ha especificado "UTF-8" como el parámetro de tipo de codificación de htmlspecialchars(), devolverá una cadena vacía si la cadena no cumple con "UTF-8". Lo dice en el PHP manual.

Una solución simple es utilizar el indicador de sustituir o ignorar. Cambio:

htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT, "UTF-8") 

Para:

htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT|ENT_SUBSTITUTE, "UTF-8") 

O:

htmlspecialchars($aboutarray[0]['about_us'], ENT_COMPAT|ENT_IGNORE, "UTF-8") 

Nota: ENT_IGNORE elimina los bytes no conformes. Esto podría causar a security issue. Es mejor comprender realmente el contenido de su cadena y cómo se codifica. Corrija el origen del problema en lugar de usar el sencillo arreglo ENT_IGNORE.

Usted debe preguntarse por qué la cadena no está codificado en UTF-8 ... que debe ser, pero no lo es.

Sucede que acabo de encontrar este problema también; puede leer detalles sobre por qué se devuelve una cadena vacía here.

+1

P.S. También sugeriría cambiar ENT_COMPAT a ENT_QUOTES, pero como siempre, supongo que eso depende de su escenario específico. – Lakey

+1

excelente solución. – Centurion

+1

Esta respuesta hace que mi día ... Gracias – emaniacs

Cuestiones relacionadas