Encodage problème (UTF-8) en PHP
Je veux à la sortie de la chaîne de caractères en PHP:
ä ö ü ß €
Donc, j'ai encodé en utf-8 auparavant manuellement:
ä ö ü BÉTA €
Donc mon script est:
<?php
header('content-type: text/html; charset=utf-8');
echo 'ä ö ü ß €';
?>
Les 4 premiers caractères sont corrects (ä ö ü ß), mais malheureusement l' € signe n'est pas correct:
ä ö ü ß
Pouvez-vous me dire ce que j'ai fait de mal? Mon éditeur (Notepad++) a des paramètres pour l'Encodage (Ansi/UTF-8) et le Format (Windows/Unix). Dois-je les changer?
J'espère que vous pourrez m'aider. Merci à l'avance!
- Vous devez utiliser un éditeur de texte qui supporte l'UTF-8. Ce que vous avez fait est juste de l'utilisation de l'ISO 8859-1 à écrire les mots de code UTF-8. L'utilisation de l'UTF-8, vous pouvez écrire des
ä ö ü ß €
directement. - Ah, désolé, c'est Windows-1252 à la place de l'ISO 8895-1
- Attention, cependant, que l'utilisation de l'UTF-8 peut insérer U+FEFF au début du fichier. Et PHP n'est pas du tout comme ça.
- Je n'ai jamais eu de problèmes avec cela. Quels sont les problèmes avec l'encodage UTF-8 fichiers encodés en avez-vous?
- Rössel: C'est la Marque d'Ordre des Octets (BOM). Ici, c'est plus à ce sujet: decodeunicode.org/de/U+FEFF Dans Notepad++, vous pouvez choisir "UTF-8 sans BOM" que l'encodage et vous n'aurez pas de problèmes avec elle.
Vous devez vous connecter pour publier un commentaire.
Que le dernier caractère n'est tout simplement pas dans le fichier (essayez d'afficher la source), qui est pourquoi vous ne le voyez pas.
Je pense que vous feriez mieux d'enregistrer le fichier PHP en UTF-8 (dans Notepad++ que des options est disponible dans le Format -> Encoder en UTF-8 sans BOM), et l'insertion de caractères réels dans votre fichier PHP (c'est à dire dans Notepad++), plutôt que de piratage autour de l'insertion
Ã
partout. Vous pouvez trouver de Caractères Windows Carte utile pour l'insertion de caractères unicode.Le signe de l'Euro (U+20AC) est codé en UTF-8 avec trois octets, et non pas deux. Ceci peut être vu ici. Si votre encodage est tout simplement faux.
Si vous voulez sortir correctement en utf8, votre script doit être:
De cette façon, même si votre script php est enregistré à un non-encodage utf-8, il faudra encore travailler.
Vous devriez toujours ensemble de votre éditeur pour le même encodage que le code HTML généré demande au navigateur d'utiliser. Si la page HTML est destiné à être interprété comme de l'UTF-8, puis configurer votre éditeur de texte UTF-8. PHP est ignorer complètement les paramètres d'encodage de l'éditeur utilisé pour créer le fichier, il traite les chaînes de caractères comme un flux d'octets.
En d'autres termes, aussi longtemps que le droit d'octets dans le fichier, tout va fonctionner. Et la meilleure façon de s'assurer le droit d'octets dans le fichier, est de définir le codage de la même une de la page web est censé être dans. Autre chose juste qui rend la vie plus difficile qu'elle doit être.
Mais la meilleure défense, c'est de laisser des caractères non-ASCII de code complètement. Vous pouvez les extraire d'une base de données ou de localisation de fichier à la place. Cela signifie que le code peut être modifié dans n'importe quel éditeur sans se soucier d'endommager l'encodage.
Ce juste informe les navigateurs quel type de contenu que vous allez envoyer, et comment il doit traiter. Il ne permet pas de définir l'encodage du contenu que vous envoyez. Il est complètement à vous de remplir votre propre promesse. Votre contenu ne va pas magiquement transformer que ce soit pour de l'UTF-8, juste parce que le jeu de tête. Si vous dire au navigateur de considérer le contenu comme de l'UTF-8, mais vous l'envoyez Latin-1 données encodées, bien sûr, il va se casser.
Je vous renvoie à Ce Que Chaque Programmeur Absolument Besoin De Savoir Sur Les Codages Et Les Jeux De Caractères Pour Travailler Avec Du Texte
cela a fonctionné pour moi
Source : https://github.com/jdorn/php-reports/issues/100