Utilisez toujours l'encodage UTF-8
P粉548512637
2023-07-24 19:47:11
<p>
Je configure un nouveau serveur et souhaite une prise en charge complète de l'UTF-8 dans mon application Web. J'ai déjà essayé cela sur des serveurs existants, mais il me semblait toujours devoir recourir à la norme ISO-8859-1. <br />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 à laquelle je peux me référer ou résoudre les incohérences ? <br />Il s'agit d'un nouveau serveur Linux exécutant MySQL 5, PHP 5 et Apache 2. <br /></p><p><br /></p>
J'aimerais ajouter à l'excellente réponse de chazomaticus :
N'oubliez pas non plus les balises META (comme celle-ci, ou les versions 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, qui fonctionne bien dans tous les autres navigateurs, mais Internet Explorer insiste toujours pour utiliser le codage "Europe occidentale". .
Il s'avère qu'il manque la balise META sur la page. Après l'avoir ajouté, le problème a été résolu.
Modifier :
Le W3C dispose en effet d'une section importante dédiée aux questions d'internationalisation (I18N). Ils ont un certain nombre d'articles liés à ce problème, couvrant HTTP, (X)HTML et CSS :
Ils recommandent d'utiliser à la fois les en-têtes HTTP et les balises méta HTML (ou d'utiliser des déclarations XML en XHTML fournies au format XML).
Stockage de données :
Spécifiez le jeu de caractères utf8mb4 sur toutes les tables et colonnes de texte de la base de données. De cette façon, MySQL stockera et récupérera physiquement la valeur dans son encodage natif UTF-8. Notez que si les classements utf8mb4_* sont spécifiés (sans aucun jeu de caractères explicite), MySQL utilisera implicitement le codage utf8mb4.
Dans les anciennes versions de MySQL (
Accès aux données :
Dans le code de votre 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, lorsque MySQL transmet les données à votre application, il n'effectue aucune conversion depuis son UTF-8 natif et vice versa.
Certains pilotes fournissent leur propre mécanisme de configuration du 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 le jeu de caractères dans le DSN :
Si vous utilisez MySQLi, vous pouvez appeler set_charset():
Si vous ne pouvez utiliser que les fonctions MySQL normales, mais que vous exécutez PHP ≥ 5.2.3, vous pouvez appeler la méthode 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 que les données sur la connexion soient codées : SET NAMES 'utf8mb4'.
Les mêmes considérations que ci-dessus s'appliquent à utf8mb4/utf8.
Sortie :
Entrée :
Autres notes de code :
Évidemment, tous les fichiers que vous fournissez (PHP, HTML, JavaScript, etc.) doivent être codés en UTF-8 valide.
Vous devez vous assurer que chaque fois que vous manipulez des chaînes UTF-8, cela est en sécurité. Malheureusement, 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 prennent pas en charge UTF-8 par défaut. Il existe certaines opérations de chaîne PHP normales que vous pouvez utiliser en toute sécurité (telles que la concaténation), mais pour la plupart des opérations, vous devez utiliser les fonctions mbstring équivalentes.
Afin de savoir ce que vous faites (c'est-à-dire ne pas vous tromper), vous devez vraiment comprendre UTF-8 et comment il fonctionne au niveau le plus bas. Consultez l'un des liens sur utf8.com qui fournissent d'excellentes ressources pour apprendre tout ce que vous devez savoir.