Points de base
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'])) { // 执行某些操作... }
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']);
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);
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);
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());
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
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); }
ou:
if (!utf8_fits_inside($title , 60)) { $title = utf8_substr($title, 0 ,60); }
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);
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);
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));
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!