"Adoptez UTF-8 de manière cohérente"
P粉404539732
P粉404539732 2023-08-20 20:33:50
0
2
561
<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 j'ai toujours dû recourir à la norme 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 que je peux suivre, ou où les incohérences peuvent être résolues ? </p> <p>Il s'agit d'un nouveau serveur Linux exécutant MySQL 5, PHP 5 et Apache 2. </p>
P粉404539732
P粉404539732

répondre à tous(2)
P粉497463473

J'aimerais ajouter un peu à 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 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 zone d'internationalisation (I18N) assez vaste. 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 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粉726133917

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 (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 conversion depuis son UTF-8 natif lors de la transmission des données à l'application et vice versa.

  • Certains pilotes fournissent leur propre mécanisme pour configurer le jeu de caractères de connexion, qui met simultanément à 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 limité à l'utilisation de mysql pur, mais que vous exécutez 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 que les données soient codé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, comme le fait 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, il faut indiquer au navigateur dans quel encodage envoyer les données (via les en-têtes de réponse HTTP ou les métadonnées HTML).
  • Utilisez json_encode()对输出进行编码时,作为第二个参数添加JSON_UNESCAPED_UNICODE.

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 du côté de la saisie.
  • Si vous avez des doutes sur l'encodage de la requête (par exemple, elle pourrait avoir été falsifiée), vous pouvez vérifier que chaque chaîne reçue est UTF-8 valide avant d'essayer de la stocker ou de l'utiliser n'importe où. Les PHP mb_check_encoding() peuvent le faire, mais vous devez toujours l'utiliser. Puisqu'un client malveillant peut soumettre des données dans le codage de son choix, il n'existe aucun moyen fiable pour que PHP le fasse à votre place.

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 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 accéder à d'excellentes ressources sur tout ce que vous devez savoir.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal