web-dev-qa-db-fra.com

Encodage d'une chaîne au format UTF-8 avec BOM dans PHP

comment puis-je forcer PHP pour ajouter la nomenclature lors de l'utilisation de utf8_encode?

Voici ce que j'essaie de faire:

$Zip->addFromString($filename, utf8_encode($xml));

Malheureusement (pour moi), le résultat n'aura pas la marque de nomenclature au début.

24
Jeano

Avez-vous essayé d'en ajouter un vous-même?

BOM UTF-8 semble être 0xEF 0xBB 0xBF, vous pouvez donc l'attacher à votre chaîne après conversion en UTF-8.

$utf8_with_bom = chr(239) . chr(187) . chr(191) . $utf8_string;

Attention cependant. utf8_encode veut une chaîne ISO-8859-1. Si vous travaillez avec XML, assurez-vous que le XML n'est pas déjà UTF-8 encodé. Les commentaires sur la documentation suggèrent que la fonction est cassée de différentes manières amusantes, donc vous ne devriez pas la jeter à moins que vous sachez que vous en ayez besoin.

Rappelez-vous, PHP sont simplement des octets stupides et inconnus. Aucun jeu de caractères ne leur est attaché, donc si les données de la chaîne sont déjà UTF-8, vous n'avez pas besoin pour exécuter la conversion.

En outre, l'article Wikipedia lié dit ceci:

Bien que la norme Unicode autorise la nomenclature en UTF-8, elle ne l'exige pas ni ne la recommande. L'ordre des octets n'a pas de sens en UTF-8 , donc une nomenclature ne sert qu'à identifier un flux de texte ou un fichier comme UTF-8 ou qu'il a été converti à partir d'un autre format doté d'une nomenclature.

Vous n'avez probablement pas besoin de vous soucier de la claquette BOM pour commencer.

66
Charles