2011-06-23 19 views
5

tenemos una aplicación web donde permitimos a los usuarios ingresar su propio html en un área de texto. Guardamos esos datos en nuestra base de datos.htmlentities() hace que los caracteres chinos sean inutilizables

Cuando cargamos los datos html en el área de texto, por supuesto, usamos htmlentities() antes de arrojar los datos html en el área de texto. De lo contrario, los usuarios podrían guardar dentro del área de texto y nuestra aplicación se rompería al cargar eso en el área de texto.

esto funciona muy bien, excepto cuando se ingresan caracteres chinos (y probablemente otros idiomas como árabe, japonés).

Los htmlentities() hace que el texto chino inservible como esto: èóüçï Cuando quito los htmlentities() antes de cargar el entró en html en el área de texto, los caracteres chinos aparecen bien, pero luego tenemos el problema de que HTML interfiere con nuestro área de texto, especialmente cuando un usuario ingresa dentro del área de texto.

Espero que tenga sentido.

¿Alguien sabe cómo podemos permitir de manera segura y correcta idiomas como el chino, japonés, ... para ser utilizados dentro de nuestra área de texto, mientras que todavía es seguro para cargar cualquier html dentro de nuestra área de texto?

+3

Intente especificar el parámetro 'charset' – Robik

+0

¿Qué codificación de caracteres está utilizando? – GordonM

+0

¿Qué juego de caracteres está definido para tu página? –

Respuesta

2

Especifique el juego de caracteres, p. UTF-8 y debería funcionar.

echo htmlentities($data, ENT_COMPAT, 'UTF-8'); 
+0

esto también funciona, pero ya encontramos nuestra respuesta anterior. Gracias por ayudar! – Jorre

2

PHP es bastante mediocre en términos de apoyo de todo el marco para juegos de caracteres internacionales (aunque está mejorando poco a poco, sobre todo en PHP5, pero no se especifica cuál es la versión que está utilizando). Sin embargo, hay algunas funciones mb_ (multibyte, como en caracteres multibyte) para ayudarte.

Este ejemplo puede ayudarle (de here):

<?php 
/** 
* Multibyte equivalent for htmlentities() [lite version :)] 
* 
* @param string $str 
* @param string $encoding 
* @return string 
**/ 
function mb_htmlentities($str, $encoding = 'utf-8') { 
    mb_regex_encoding($encoding); 
    $pattern = array('<', '>', '"', '\''); 
    $replacement = array('&lt;', '&gt;', '&quot;', '&#39;'); 
    for ($i=0; $i<sizeof($pattern); $i++) { 
     $str = mb_ereg_replace($pattern[$i], $replacement[$i], $str); 
    } 
    return $str; 
} 
?> 

También, asegúrese de que su página está especificando el mismo juego de caracteres. Usted puede hacer esto con una etiqueta meta:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
0

Lo más probable es que usted no está utilizando la codificación correcta. Si ya conoce su codificación de salida, use el argumento charset del html_entities function.

Si aún no se ha decidido por una codificación interna, eche un vistazo a las funciones iconv; iconv_set_encoding("internal_encoding", "UTF-8"); podría ser un buen comienzo.

Cuestiones relacionadas