Maison > Questions et réponses > le corps du texte
P粉6966058332023-08-22 18:00:48
Je voudrais ajouter à l'excellente réponse de chazomaticus :
N'oubliez pas non plus la balise META (comme celle-ci, ou la version HTML4 ou XHTML) :
<meta charset="utf-8">
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, qui fonctionne bien 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'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).
P粉1517201732023-08-22 15:53:50
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 (<5.5.3), vous devrez utiliser utf8
qui ne prend 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 conversion vers son UTF-8 natif lorsqu'il transmet les données à l'application ou 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 d'utiliser l'encodage 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 DSNcharset
:
$dbh = new PDO('mysql:charset=utf8mb4');
Si vous utilisez mysqli, vous pouvez appeler set_charset()
:
$mysqli->set_charset('utf8mb4'); // 面向对象风格 mysqli_set_charset($link, 'utf8mb4'); // 过程化风格
Si vous n'avez accès qu'à 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 à l'application MySQL comment vous souhaitez que les données sur la connexion soient codées : SET NAMES 'utf8mb4'
.
Mêmes considérations que ci-dessus concernant utf8mb4
/utf8
/
Sortie
:🎜Content-Type: text/html; charset=utf-8
。您可以通过在php.ini中设置default_charset
(首选)或手动使用header()
à réaliser. json_encode()
对输出进行编码时,将JSON_UNESCAPED_UNICODE
comme deuxième argument. Entrez :
mb_check_encoding()
peut le faire, mais vous devez être strict quant à son utilisation. Il n'y a vraiment 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 trouvé de moyen fiable pour que PHP le fasse 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 de le faire en toute sécurité chaque fois que vous manipulez des chaînes UTF-8. C'est la partie la plus difficile. Vous devrez peut-être utiliser largement l'extension 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 pour la plupart des opérations, vous devez utiliser les fonctions mbstring
équivalentes.
Pour comprendre ce que vous faites (c'est-à-dire ne pas tout gâcher), vous devez vraiment comprendre UTF-8 et comment il fonctionne au niveau le plus bas. Consultez l'un des liens sur utf8.com pour d'excellentes ressources sur tout ce que vous devez apprendre.