web-dev-qa-db-fra.com

Comment convertir des entités HTML comme - en leurs équivalents de caractères?

Je crée un fichier qui doit être enregistré sur l'ordinateur d'un utilisateur local (non rendu dans un navigateur Web).

J'utilise actuellement html_entity_decode, mais cela ne convertit pas des caractères comme – (qui est le n-tiret) et je me demandais quelle autre fonction je devrais utiliser.

Par exemple, lorsque le fichier est importé dans le logiciel, au lieu du ndash ou simplement d'un - il apparaît sous la forme –. Je sais que je pourrais utiliser str_replace, mais si cela se produit avec ce caractère, cela pourrait arriver avec beaucoup d'autres, car les données sont dynamiques.

16
Cofey

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éfinissez UTF-8 comme jeu de caractères de sortie et il décodera:

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

Dans la mesure du possible, évitez au départ les entités HTML. Je ne sais pas d'où proviennent ces données codées, mais si vous les stockez ainsi dans la base de données ou ailleurs, vous le faites mal. Stockez toujours les données encodées en UTF-8 et ne les convertissez qu'en entités HTML ou échappez-vous de toute autre manière pour une sortie lorsque cela est nécessaire.

31
deceze

Essayez mb_convert_encoding():

$string = "n–dash";
$output = mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES');
echo $output;
16
Lèse majesté

METTRE À 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;
}
1
Jaydeep Gondaliya

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 interprété votre question, veuillez me le faire savoir.

0
Luke Stevenson

Encodez le fichier au format UTF-8 en utilisant utf8_encode(). Ensuite, vous n'avez rien à remplacer/supprimer.

0
ThiefMaster