Maison > développement back-end > tutoriel php > Amenant Unicode à PHP avec UTF-8 portable

Amenant Unicode à PHP avec UTF-8 portable

Christopher Nolan
Libérer: 2025-02-23 09:29:09
original
692 Les gens l'ont consulté

Bringing Unicode to PHP with Portable UTF-8

Points de base

  • Bien que PHP soit capable de gérer les noms de variables multi-octets et les chaînes Unicode, le langage manque de support Unicode complet en raison du traitement des chaînes comme des séquences de caractères à un octet. Cette limitation affecte tous les aspects du fonctionnement des chaînes, y compris l'extraction de la sous-chaîne, la détermination de la longueur de la chaîne et la segmentation des chaînes.
  • Portable UTF-8 est une bibliothèque d'espace utilisateur qui apporte la prise en charge Unicode aux applications PHP. Il est construit au-dessus de MBSTring et ICONV, fournit environ 60 fonctions de manipulation, de test et de vérification de la chaîne basée sur Unicode et utilise UTF-8 comme schéma de codage de caractères principal. La bibliothèque est entièrement portable et peut être utilisée avec toute installation PHP 4.2 ou ultérieure.
  • La bibliothèque UTF-8 portable fournit plusieurs fonctions pour le traitement des chaînes Unicode, y compris la vérification de l'entrée UTF-8, en supprimant les octets non valides, en codant pour le texte dans des entités HTML pour empêcher les attaques XSS, rédaction des espaces, supprimer des espaces en double, créer des inclusions UTF-8 caractères UTF-8 caractères UTF-8 Fragments d'URL et limites forcées sur la longueur du caractère d'entrée. Cela garantit que dans les applications compatibles Unicode, la focalisation passe de l'octet et des longueurs d'octets aux longueurs de caractère et de caractère.

PHP permet des noms de variables multi-octets (par exemple $a∩b, $Ʃxy et $Δx), mbstring et d'autres extensions peuvent gérer les chaînes Unicode, et utf8_encode() et utf8_decode() les fonctions peuvent être utilisées dans UTF Convertissez les chaînes entre -8 et le codage ISO-8859-1. Cependant, on pense largement que PHP manque de support Unicode. Cet article décrit la signification du manque de support Unicode et montre comment utiliser une bibliothèque qui apporte le support Unicode aux applications PHP - UTF-8 portable.

Prise en charge Unicode dans PHP

Le manque de prise en charge UNICODE / Multi-Byte de PHP signifie que les fonctions de traitement des chaînes standard traitent les chaînes comme des séquences de caractères à un octet. En fait, le manuel PHP officiel définit une chaîne en PHP comme "une série de caractères, dont l'un est le même qu'un octet". PHP ne prend en charge que les caractères 8 bits, tandis que Unicode (et de nombreux autres jeux de caractères) peuvent nécessiter plusieurs octets pour représenter un caractère. Cette limitation de PHP affecte presque tous les aspects du fonctionnement de la chaîne, y compris (mais sans s'y limiter) l'extraction de la sous-chaîne, la détermination de la longueur de la chaîne, la segmentation des chaînes, le mélange, etc. Les efforts pour résoudre ce problème ont commencé au début de 2005, mais en 2010, le travail de support de l'Unicode indigène à PHP a été arrêté et suspendu pour diverses raisons. Étant donné que le support UNICODE natif dans PHP peut prendre des années à mettre en œuvre (si c'est le cas), les développeurs doivent compter sur des extensions disponibles telles que mbstring et iconv pour combler cette lacune, mais ces extensions n'offrent que le support Unicode limité. Ces bibliothèques ne sont pas centrées sur Unicode et peuvent également être converties entre les encodages non Unicode. Ils apportent une contribution positive à la simplification du traitement des chaînes Unicode. Cependant, l'extension ci-dessus présente également certains inconvénients. Ils ne fournissent que des capacités de traitement de chaîne UNICODE limitées, et aucune d'entre elles n'est activée par défaut. Les administrateurs de serveur doivent activer explicitement l'une ou toutes les extensions pour y accéder via des applications PHP. Les fournisseurs d'hébergement partagés aggravent souvent les choses en installant une ou deux extensions, ce qui rend difficile pour les développeurs de s'appuyer sur une API toujours disponible pour répondre à leurs besoins Unicode. Pourtant, la bonne nouvelle est que PHP peut sortir du texte Unicode. En effet, PHP ne se soucie pas vraiment de savoir si nous envoyons du texte anglais codé en ASCII ou un autre texte appartenant à la langue dont les caractères sont codés en plusieurs octets. Sachant cela, les développeurs PHP n'ont désormais besoin que d'une API qui fournit une manipulation de chaîne basée sur Unicode confortable.

UTF-8 PORTABLE

La solution récente consiste à créer une bibliothèque d'espace utilisateur écrite en PHP. Même si le niveau du serveur / du langage manque de prise en charge, ces bibliothèques peuvent être facilement regroupées avec l'application pour assurer la présence de la prise en charge Unicode. De nombreuses applications open source incluent déjà leurs propres bibliothèques de ce type, et beaucoup d'autres utilisent des bibliothèques tierces gratuites UTF-8 est une telle bibliothèque. Portable UTF-8 est une bibliothèque légère gratuite construite au-dessus de mbstring et iconv. Il étend la fonctionnalité de ces deux extensions, fournissant environ 60 fonctions de manipulation, de test et de vérification basées sur UNICODE; Comme son nom l'indique, UTF-8 portable utilise UTF-8 comme schéma de codage de caractère principal. La bibliothèque utilise des extensions disponibles (mbstring et iconv) pour des raisons de vitesse et pantement certaines incohérences lorsque vous les utilisez directement, mais s'il n'y a pas de ces extensions sur le serveur, il repose à l'utilisation de la routine pure PHP A UTF-8 écrite écrite écrite . Portable-UT8 est entièrement portable et peut être utilisé avec n'importe quelle installation PHP 4.2 ou ultérieure.

Traitement du support à l'aide de UTF-8

Les éditeurs de texte avec un mauvais support Unicode peuvent corrompre le texte lors de la lecture du texte, et du texte copié et collé dans des formulaires Web à partir d'un tel éditeur peut être la source de UTF-8 non valide pour l'application. Lors du traitement des entrées soumises par l'utilisateur, assurez-vous de vous assurer que l'entrée est exactement conforme aux attentes de l'application. Pour détecter si le texte est valide UTF-8, vous pouvez utiliser la fonction is_utf8() de la bibliothèque.

if (is_utf8($_POST['title'])) {
    // 执行某些操作...
}
Copier après la connexion

La récupération des caractères à partir d'octets invalides est impossible, donc la suppression des octets qui ne sont pas reconnus comme des caractères UTF-8 valides peuvent être votre seul choix. La fonction utf8_clean() peut être utilisée pour supprimer les octets non valides.

$title = utf8_clean($_POST['title']);
Copier après la connexion

Chaque caractère Unicode peut être codé comme l'entité HTML correspondante, et vous voudrez peut-être coder le texte de cette manière pour aider à prévenir les attaques XSS avant de la sortir au navigateur.

echo utf8_html_encode($title);
Copier après la connexion

Habituellement, les espaces sont coupés au début et à la fin d'une chaîne. Unicode répertorie environ 20 caractères d'espace, et certains caractères de contrôle basés sur ASCII doivent également être considérés comme des objets qui doivent être élagués.

$title = utf8_trim($title);
Copier après la connexion

En revanche, les doublons de ces espaces peuvent exister au milieu d'une chaîne et doivent être supprimés. Ce qui suit montre comment utiliser utf8_remove_duplicates() et utf8_ws() en combinaison:

$title = utf8_remove_duplicates($title, utf8_ws());
Copier après la connexion

La solution traditionnelle pour créer des fragments d'URL à des fins de référencement utilise la translittération et supprime tous les caractères non ASCII du fragment. Cela rend l'URL moins précieuse qu'elle ne l'est. Bien que l'URL puisse prendre en charge les caractères codés UTF-8, sans une telle suppression ou une telle translittération, nous pouvons créer des extraits riches contenant des caractères dans n'importe quelle langue:

$slug = utf8_url_slug($title, 30); // 字符长度30
Copier après la connexion

Du début de la vérification d'entrée à la sauvegarde des données dans une base de données, les applications compatibles UNICODE se concentrent sur les longueurs de caractère et de caractère, et non des longueurs d'octets et d'octets. Ce changement de mise au point nécessite une nouvelle interface pour comprendre cette différence. Il est généralement nécessaire de limiter la longueur du caractère d'entrée, donc si l'entrée mesure plus de 60 caractères, nous créerons une sous-chaîne.

if (utf8_strlen($title) > 60) {
    $title  = utf8_substr($title, 0, 60);
}
Copier après la connexion

ou:

if (!utf8_fits_inside($title , 60)) {
    $title  = utf8_substr($title, 0 ,60);
}
Copier après la connexion

Il existe trois façons différentes d'accéder à un seul caractère à l'aide de la bibliothèque portable-UT8. Nous pouvons utiliser utf8_access() pour accéder à un seul caractère.

echo '第六个字符是:' . utf8_access($string, 5);
Copier après la connexion

utf8_chr_map() permet un accès itératif d'un seul caractère à l'aide d'une fonction de rappel.

utf8_chr_map('some_callback', $string);
Copier après la connexion

Nous pouvons diviser la chaîne en un tableau de caractères en utilisant utf8_split() et traiter les éléments du tableau en tant que caractère.

array_map('some_callback', utf8_split($string));
Copier après la connexion

Formation Unicode peut également nous obliger à trouver le point de code minimum / maximum dans la chaîne, segmenter la chaîne, les marqueurs de commande d'octets de processus, la conversion de cas de chaîne, la randomisation / mélange, le remplacement, etc. Tout cela est pris en charge par Portable-UT8.

Conclusion

Le développement de PHP 6 a été arrêté, ce qui a entraîné le retard du besoin à long terme du support Unicode natif, ce qui est crucial pour le développement d'applications multilingues. Par conséquent, les extensions côté serveur et les bibliothèques d'espace utilisateur telles que UTF-8 portable jouent un rôle important en aidant les développeurs à créer de meilleures toiles standardisées pour répondre aux besoins locaux.

(La partie FAQ est omise ici en raison des limitations de l'espace)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal