recherche

Maison  >  Questions et réponses  >  le corps du texte

Le titre est réécrit comme suit : "Utilisation de l'encodage UTF-8 partout"

<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>
P粉321676640P粉321676640466 Il y a quelques jours532

répondre à tous(2)je répondrai

  • P粉790187507

    P粉7901875072023-08-22 19:20:43

    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 ) :

    <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 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).

    répondre
    0
  • P粉653045807

    P粉6530458072023-08-22 18:34:47

    Stockage de données :

    • Spécifiez utf8mb4字符集。这样,MySQL会以UTF-8的原生编码方式物理存储和检索值。请注意,如果指定了utf8mb4_*排序规则(而没有明确指定字符集),MySQL将隐式使用utf8mb4encoding sur toutes les tables et colonnes de texte de la base de données.

    • Dans les anciennes versions de MySQL (<5.5.3), vous ne pouviez utiliser que 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 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 ê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 utf8mb4/utf8/

      que ci-dessus s'appliquent ici.

    Sortie

     :🎜
    • UTF-8 doit être défini dans l'en-tête HTTP, par exemple par la fonction Content-Type: text/html; charset=utf-8。你可以通过在php.ini中设置default_charset(首选)或手动使用header().
    • Si votre application transfère du texte vers d'autres systèmes, ils doivent également connaître le codage des caractères. Pour les applications web, le navigateur doit savoir dans quel encodage envoyer les données (soit via les en-têtes de réponse HTTP, soit via les métadonnées HTML).
    • Ajoutez en utilisant json_encode()编码输出时,将JSON_UNESCAPED_UNICODE comme deuxième argument.

    Entrez  :

    • Le navigateur soumettra les données dans le jeu de caractères spécifié par le document, aucun traitement spécial n'est donc requis lors de la saisie.
    • Si vous avez des doutes sur le codage de la requête (au cas où il aurait été falsifié), vous pouvez vérifier que chaque chaîne reçue est UTF-8 valide avant de stocker ou d'utiliser des données. Les PHP 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.

    répondre
    0
  • Annulerrépondre