2011-02-02 5 views
13

Je crée un fichier qui doit être enregistré sur l'ordinateur d'un utilisateur local (non rendu dans un navigateur Web).Comment faire pour convertir des entités HTML comme – à leurs équivalents de caractères?

J'utilise actuellement html_entity_decode, mais cela ne convertit pas les caractères comme – (qui est le n-dash) et se demandait quelle autre fonction je devrais utiliser. Par exemple, lorsque le fichier est importé dans le logiciel, à la place du ndash ou juste a - il apparaît comme –. Je sais que je pourrais utiliser str_replace, mais si ça se passe avec ce personnage, cela pourrait arriver avec beaucoup d'autres puisque les données sont dynamiques.

Répondre

30

Vous devez définir le jeu de caractères cible. – n'est pas un caractère valide dans le jeu de caractères ISO-8859-1 par défaut, il n'est donc pas décodé. Définir UTF-8 comme le jeu de caractères de sortie et il décode:

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

Si possible, vous devez éviter les entités HTML pour commencer. Je ne sais pas d'où proviennent les données encodées, mais si vous les stockez dans la base de données ou ailleurs, vous vous trompez. Toujours stocker les données codées en UTF-8 et convertir uniquement en entités HTML ou autrement échapper pour la sortie si nécessaire.

+0

Bon appel. Je pensais que c'était bizarre que la table de traduction sortie par 'get_html_translation_table()' semblait manquer '– 'et' — '. Mais il ne m'était pas venu à l'esprit que c'était à cause du jeu de caractères par défaut. –

+0

J'utilise WordPress pour stocker les données dans la base de données. – Cofey

0

Encodez le fichier en UTF-8 à l'aide de utf8_encode(). Ensuite, vous n'avez pas besoin de remplacer/enlever quoi que ce soit.

+0

J'ai essayé d'ajouter charset = utf-8 à mon en-tête "header ('Content-type: text/calendar; jeu de caractères = utf-8');" et a également exécuté le code qui est répercuté dans le fichier en utilisant utf8_encode ($ data) ;, mais cela n'a fait aucune différence. Des idées? – Cofey

0

Essayez-vous de transformer les caractères en entités HTML pour le stockage et la récupération ultérieure?

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

Si j'ai mal lu votre question, s'il vous plaît faites le moi savoir.

15

Essayez mb_convert_encoding():

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

MISE À JOUR

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

j'ai eu le même problème. J'extrayais des paragraphes HTML et sauvegardais dans la base de données mais le texte enregistrerait avec tous les caractères HTML. L'utilisation de mb_convert_encoding() n'a pas aidé. Cependant, html_entity_decode($str); travaillé !

Questions connexes