2010-09-27 8 views

Respuesta

13

Asegúrese de especificar la codificación UTF-8 si los archivos se codifican como tal:

htmlspecialchars($str, ENT_COMPAT, 'UTF-8'); 

El conjunto de caracteres por defecto para htmlspecialchars es ISO-8859-1 (a partir de PHP v5.4 el juego de caracteres por defecto se convirtió en 'UTF-8'), lo que podría explicar por qué las cosas se vuelven locas cuando se encuentra con caracteres multibyte.

+0

Línea 207 está aquí. $ charset = 'UTF-8'; htmlspecialchars ($ text, ENT_QUOTES, $ charset); // Line 207 – gautamlakum

+1

Para mí, este problema terminó siendo el inverso, que el conjunto de caracteres de mis datos era en realidad 'ISO-8859-1' cuando intentaba codificarlo como 'UTF-8' en htmlspecialchars. Cambié el argumento del juego de caracteres a 'ISO-8859-1' y eso resolvió el problema. Al menos, hasta que pueda actualizar todo completamente a 'UTF-8'. – Kzqai

+5

A partir de PHP 5.4.0, el valor predeterminado del 3er parámetro de 'htmlspecialchars()' es ''UTF-8'' - esta respuesta debe actualizarse. –

4

Está introduciendo datos de caracteres dañados en la función o no especifica la codificación correcta.

Tuve este problema hace un tiempo, el comportamiento anterior (antes de PHP 5.2.7 creo) era devolver la cadena a pesar de la corrupción, pero desde esa versión arrojará este error en su lugar.

Mi solución consistía en escribir una secuencia de comandos para alimentar mis cadenas a través del iconv utilizando el modificador // IGNORE para eliminar datos dañados.

(Tuvimos una base de datos dañada que tenía algunas cadenas en UTF-8, algunas en latin-1 generalmente con tipos de caracteres incorrectamente definidos en las columnas).

(Mirando el comentario a la respuesta de Tatu, me gustaría empezar por mirar (y jugando con) el contenido de la variable $ charset.

+0

Estoy de acuerdo. Pasé los datos del usuario a través de iconv o mb_convert_encoding(), con los conjuntos de caracteres 'desde' y 'hacia'. Por lo general, hay una opción para quitar los caracteres no válidos. –

+0

Datos corruptos aquí también, mb_convert_encoding ($ var, 'UTF-8') hizo el trabajo. –

0

que en realidad es uno de los errores más frecuentes que recibo.

a veces no utilizo __() traducción -. texto simplemente alemán contiene AOU Allí es especialmente importante a la mente la codificación de los archivos

Así que asegúrese de guardar adecuadamente los archivos que contienen caracteres especiales como UTF-8..

+0

el enlace está roto. – billynoah

1

El código correcto con el fin de no obtener ninguna de error es:

htmlentities($string, ENT_IGNORE, 'UTF-8') ;

Junto a esto también se puede utilizar para reemplazar str_replace algunos personajes malos a sus necesidades y luego usar htmlentities función.

Eche un vistazo a este rss feed que reemplazó el mayor signo html en gt; etiqueta que puede no verse bien al leer thee rss feed. Puede reemplazar esto con algo como "-" signo o ")" y etc.

1

Tuve el mismo problema porque estaba usando substr en cadena utf-8.
El error no fue frecuente y aparentemente aleatorio. ¡Ocurrió un error solo si se cortó una cadena en un carácter multibyte!

mb_substr resuelto el problema :)

Cuestiones relacionadas