2011-02-02 23 views
13

Estoy creando un archivo que se guardará en la computadora de un usuario local (no se representa en un navegador web).Cómo convertir entidades HTML como – a sus equivalentes de caracteres?

Actualmente estoy usando html_entity_decode, pero esto no está convirtiendo caracteres como – (que es el n-dash) y me preguntaba qué otra función debería estar usando.

Por ejemplo, cuando el archivo se importa en el software, en lugar del ndash o simplemente a - se muestra como –. Sé que podría usar str_replace, pero si está sucediendo con este personaje, podría suceder con muchos otros ya que los datos son dinámicos.

Respuesta

30

Debe definir el conjunto de caracteres objetivo. – no es un carácter válido en el juego de caracteres predeterminado ISO-8859-1, por lo que no se decodifica. Definir UTF-8 como el juego de caracteres y decodificará:

echo html_entity_decode('–', ENT_NOQUOTES, 'UTF-8'); 

Si es posible, se debe evitar entidades HTML, para empezar. No sé de dónde provienen los datos codificados, pero si lo está almacenando así en la base de datos o en otro lugar, lo está haciendo mal. Guarde siempre los datos codificados en UTF-8 y solo conviértelos a entidades HTML o de lo contrario escapé para obtener resultados cuando sea necesario.

+0

Buena llamada. Pensé que era extraño que la tabla de traducción salida por 'get_html_translation_table()' pareciera faltar '–' y '—'. Pero no se me había ocurrido que fuera por el conjunto de caracteres de salida predeterminado. –

+0

Estoy usando WordPress para almacenar los datos en la base de datos. – Cofey

0

Codifique el archivo como UTF-8 usando utf8_encode(). Entonces no tienes que reemplazar/eliminar nada.

+0

Intenté agregar charset = utf-8 a mi encabezado "header ('Content-type: text/calendar; charset = utf-8');" y también ejecutó el código que se hizo eco en el archivo usando utf8_encode ($ data) ;, pero no hizo ninguna diferencia. ¿Algunas ideas? – Cofey

0

¿Está tratando de convertir los caracteres en Entidades HTML para su almacenamiento y posterior recuperación?

htmlentities('–', ENT_COMPAT, 'UTF-8'); 
// Returns "–" 

Si he leído mal tu pregunta, házmelo saber.

15

Trate mb_convert_encoding():

$string = "n–dash"; 
$output = mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES'); 
echo $output; 
1

ACTUALIZACIÓN

function decode_characters($data) 
{ 
    $text = $data; 
    $enc = mb_detect_encoding($text, "UTF-8,ISO-8859-1"); 
    $resutl_characters = iconv($enc, "UTF-8", $text); 
    return $resutl_characters; 
} 
0

que tenían el mismo problema. Extraía párrafos HTML y guardaba en la base de datos, pero el texto se guardaba con todos los caracteres HTML. Usar mb_convert_encoding() no ayudó. Sin embargo, html_entity_decode($str); trabajó !

Cuestiones relacionadas