Utilisez toujours UTF-8
P粉964682904
P粉964682904 2023-08-27 16:00:18
0
2
538
<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 dans le passé sur des serveurs existants, mais j'ai toujours semblé devoir recourir à la norme ISO-8859-1. </p> <p>Où dois-je exactement définir l'encodage/le jeu de caractères ? Je sais que je dois configurer Apache, MySQL et PHP pour ce faire. Existe-t-il une liste de contrôle standard que je peux suivre, ou peut-être résoudre les problèmes d'incompatibilité ? </p> <p>Cela s'applique aux nouveaux serveurs Linux exécutant MySQL 5, PHP, 5 et Apache 2. </p>
P粉964682904
P粉964682904

répondre à tous(2)
P粉854119263

J'aimerais ajouter une chose à l'excellente réponse de 一个>chazomaticus :

N'oubliez pas non plus la balise META (comme celle-ci, ou sa 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'avère qu'il manquait la balise META sur la page. L'ajouter résout le problème.

Éditeur :

Le W3C a en fait une assez grande section dédiée à l'I18N. Ils ont un certain nombre d'articles liés à ce problème - décrivant des aspects de HTTP, (X)HTML et CSS :

Ils recommandent d'utiliser à la fois des en-têtes HTTP et des balises méta HTML (ou des déclarations XML dans le cas de XHTML agissant comme XML).

P粉763662390

Stockage de données :

  • Spécifiez que le utf8mb4 character set on all tables and text columns in your database. This makes MySQL physically store and retrieve values encoded natively in UTF-8. Note that MySQL will implicitly use utf8mb4 encoding if a utf8mb4_* classement est spécifié (sans aucun jeu de caractères explicite).

  • Dans les anciennes versions de MySQL (< 5.5.3), vous serez malheureusement obligé d'utiliser simplement utf8, qui ne prend en charge qu'un sous-ensemble de caractères Unicode.

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 devrez définir le jeu de caractères de connexion sur utf8mb4 De cette façon, MySQL n'effectue aucune conversion depuis son UTF-8 natif lorsqu'il transmet des données à. votre candidature 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 avec PHP ≥ 5.3.6, vous pouvez spécifier charset dans le DSN:

      $dbh = new PDO('mysql:charset=utf8mb4');
    • Si vous utilisez mysqli, vous pouvez appeler set_charset() :

      $mysqli->set_charset('utf8mb4');       // object oriented style
        mysqli_set_charset($link, 'utf8mb4');  // procedural style
    • Si vous êtes coincé avec mysql 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 s'attend à ce que les données sur la connexion soient codées : SET NAMES 'utf8mb4'.

  • La même considération concernant utf8mb4/utf8/

    s'applique comme ci-dessus.

Sortie

 : 🎜
  • UTF-8 doit être défini dans l'en-tête HTTP, tel que la fonction Content-Type: text/html; charset=utf-8. You can achieve that either by setting default_charset in php.ini (preferred), or manually using header().
  • Si votre application transfère du texte vers d'autres systèmes, ils devront également connaître le codage des caractères. Pour les applications Web, il faut indiquer au navigateur l'encodage dans lequel envoyer les données (via les en-têtes de réponse HTTP ou les métadonnées HTML).
  • Lors de l'encodage de la sortie en utilisant json_encode(), add JSON_UNESCAPED_UNICODE comme deuxième paramètre.

Entrez  :

  • Le navigateur soumettra les données pour le jeu de caractères spécifié par le document, il n'est donc pas nécessaire d'effectuer des opérations spéciales sur l'entrée.
  • Si vous avez des doutes sur l'encodage de la requête (au cas où elle pourrait être falsifiée), vous pouvez vérifier que chaque chaîne reçue est valide en UTF-8 avant d'essayer de la stocker ou de l'utiliser n'importe où. PHP mb_check_encoding() fait l'affaire, mais vous devez l'utiliser religieusement. Il n'y a vraiment aucun moyen de contourner cela, car les clients malveillants peuvent soumettre des données dans le codage de leur choix, et je n'ai pas trouvé d'astuce pour que PHP fasse cela pour vous de manière fiable.

Autres notes de code :

  • Évidemment, tous les fichiers que vous fournirez (PHP, HTML, JavaScript, etc.) doivent être codés en UTF-8 valide.

  • Vous devez vous assurer que chaque fois que vous traitez une chaîne UTF-8, vous le faites en toute sécurité. C'est malheureusement la partie la plus difficile. Vous souhaiterez probablement utiliser largement l'extension mbstring de PHP.

  • Les opérations de chaîne intégrées à PHP ne sont pas par défaut sécurisées UTF-8. Il y a certaines choses que vous pouvez faire en toute sécurité avec les opérations de chaîne PHP normales (comme la concaténation), mais pour la plupart des choses, vous devez utiliser la fonction équivalente .mbstring

  • Pour savoir ce que vous faites (lire : ne pas tout gâcher), vous devez vraiment comprendre UTF-8 et comment il fonctionne au niveau le plus bas possible. Consultez l'un des liens sur

    utf8.com pour accéder à d'excellentes ressources sur tout ce que vous devez savoir. p>

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!