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.
Suena como un problema de juego de caracteres. ¿Estás seguro de que tus datos están codificados con UTF-8? –
Es posible que esté malinterpretando su problema, pero probé esto en ideone.com y parece funcionar bien: http://ideone.com/P298n –
@ EmilVikström ¿Cómo puedo asegurarme de esto? – JimmyBanks