Le titre est réécrit comme suit : "Utilisation de l'encodage UTF-8 partout"
P粉321676640
2023-08-21 21:12:13
<p>
Je configure un nouveau serveur et souhaite une prise en charge complète de l'UTF-8 dans mon application Web. J'ai essayé cela sur des serveurs existants mais j'ai toujours dû revenir à ISO-8859-1. </p>
<p>Où dois-je définir l'encodage/le jeu de caractères ? Je sais que je dois configurer Apache, MySQL et PHP pour y parvenir. Existe-t-il une liste de contrôle standard à suivre ou des incohérences peuvent-elles être exclues ? </p>
<p>Il s'agit d'un nouveau serveur Linux exécutant MySQL 5, PHP 5 et Apache 2. </p>
Je voudrais ajouter un point supplémentaire à l’excellente réponse de chazomaticus :
N'oubliez pas non plus la balise META (comme celle-ci, ou sa version HTML4 ou XHTML ) :
Cela peut sembler trivial, mais IE7 m'a déjà posé des problèmes.
Je fais tout correctement ; la base de données, la connexion à la base de données et les en-têtes HTTP Content-Type sont tous définis sur UTF-8 et fonctionnent correctement dans tous les autres navigateurs, mais Internet Explorer insiste toujours pour utiliser le codage "Europe occidentale".
Il s'est avéré qu'il manquait la balise META sur la page. Après l'avoir ajouté, le problème a été résolu.
Éditeur :
Le W3C possède en fait une assez grande section dédiée à l'internationalisation (I18N). Ils ont beaucoup d'articles liés à ce problème - décrivant les aspects de HTTP, (X)HTML et CSS :
Ils recommandent d'utiliser à la fois les en-têtes HTTP et les balises méta HTML (ou les déclarations XML dans le cas du XHTML fourni au format XML).
Stockage de données :
Spécifiez
utf8mb4
字符集。这样,MySQL会以UTF-8的原生编码方式物理存储和检索值。请注意,如果指定了utf8mb4_*
排序规则(而没有明确指定字符集),MySQL将隐式使用utf8mb4
encoding sur toutes les tables et colonnes de texte de la base de données.Dans les anciennes versions de MySQL (utf8 qui ne prenait en charge qu'un sous-ensemble de caractères Unicode. J'espère que je plaisante.
Accès aux données :
Dans le code d'application (par exemple PHP), quelle que soit la méthode d'accès à la base de données que vous utilisez, vous devez définir le jeu de caractères de connexion sur
utf8mb4
. De cette façon, MySQL n'effectue aucune transformation sur les données lors de leur transmission à l'application et vice versa.Certains pilotes fournissent leur propre mécanisme pour configurer le jeu de caractères de connexion, qui met à jour son propre état interne et informe MySQL de l'encodage à utiliser sur la connexion - c'est généralement l'approche préférée. En PHP :
Si vous utilisez la couche d'abstraction PDO pour PHP ≥ 5.3.6, vous pouvez spécifier dans le DSN
charset
:Si vous utilisez mysqli, vous pouvez appeler
set_charset()
:Si vous êtes bloqué dans mysql pur, mais que vous utilisez PHP ≥ 5.2.3, vous pouvez appeler
mysql_set_charset
.Si le pilote ne fournit pas son propre mécanisme pour définir le jeu de caractères de connexion, vous devrez peut-être émettre une requête pour indiquer à MySQL comment votre application souhaite traiter l'encodage des données sur la connexion :
SET NAMES 'utf8mb4'
.Les mêmes mises en garde concernant
que ci-dessus s'appliquent ici.utf8mb4
/utf8
/Sortie
:🎜Content-Type: text/html; charset=utf-8
。你可以通过在php.ini中设置default_charset
(首选)或手动使用header()
.json_encode()
编码输出时,将JSON_UNESCAPED_UNICODE
comme deuxième argument.Entrez :
mb_check_encoding()
peuvent résoudre ce problème, mais vous devez vous y tenir. Il n'y a aucun moyen de contourner ce problème, car un client malveillant peut soumettre des données dans le codage de son choix, et je n'ai pas encore trouvé d'astuce pour que PHP le fasse de manière fiable pour vous.Autres notes de code :
Évidemment, tous les fichiers que vous fournirez (PHP, HTML, JavaScript, etc.) doivent être encodés en UTF-8 valide.
Vous devez vous assurer que chaque fois que vous manipulez des chaînes UTF-8, vous le faites en toute sécurité. Malheureusement, c'est la partie la plus difficile. Vous utilisez probablement beaucoup les extensions
mbstring
de PHP.Les opérations de chaîne intégrées à PHP ne sont pas sécurisées UTF-8 par défaut. Vous pouvez effectuer en toute sécurité certaines opérations en utilisant des opérations de chaîne PHP normales telles que la concaténation, mais dans la plupart des cas, vous devez utiliser les fonctions
mbstring
équivalentes.Afin de savoir ce que vous faites (c'est-à-dire ne pas gâcher), vous devez vraiment comprendre UTF-8 et comment il fonctionne au niveau le plus bas. Il existe d'excellentes ressources sur utf8.com pour apprendre tout ce que vous devez savoir.