Chaînes de caractères multi-octets Chaînes de caractères multi-octets
&reftitle.intro; Même si la plupart des langues peuvent être représentées grâce à un jeu de 128 caractères, il y a d'autres langues qui requièrent des jeux de caractères bien plus grands. Des méthodes de caractères multi-octets ont été développées pour résoudre ce type de problème. Lorsque vous manipulez des chaînes de caractères multi-octets, pour couper, rechercher ou nettoyer une chaîne, vous devez utiliser deux octets consécutifs, qui représentent un seul caractère. Si vous n'y prenez pas garde, vous allez obtenir une chaîne corrompue et invalide, avec une représentation totalement incompréhensible. mbstring fournit les fonctions spécifiques de manipulations de chaînes qui vous permet de travailler avec les encodages multi-octets en &php;. En plus de cela, mbstring gère la traduction entre les jeux de caractères disponibles. mbstring est également connu pour gérer l'Unicode, comme UTF-8 et UCS-2 ainsi que de nombreux autres jeux mono-octets.
Pré-requis de l'encodage en &php; Les jeux de caractères suivants sont bien supportés par &php;. Jeux de caractères mono-octets : qui sont compatibles avec la norme ASCII (compatible ISO646) pour les caractères de l'intervalle 00h à 7fh. Jeux de caractères multi-octets : qui sont compatibles avec la norme ASCII (compatible ISO646) pour les caractères de l'intervalle 00h à 7fh. qui n'utilisent pas les séquences de type ISO2022. qui n'utilisent pas de valeur dans l'intervalle 00h à 7fh dans les séquences composées, qui représentent un caractère unique. Les jeux de caractères suivants risquent de ne pas fonctionner en &php;. Jeux de caractères qui risquent de ne pas fonctionner en &php; Même si aucun script &php; écrit avec ces jeux de caractères ne fonctionne, notamment si des chaînes encodées sont utilisées comme identifiants, ou valeurs littérales dans le script, vous pouvez éviter d'utiliser ces jeux en activant le filtre transparent mbstring pour les données d'entrées HTTP. Il est déconseillé d'utiliser les jeux SJIS, BIG5, CP936, CP949 et GB18030 pour l'encodage interne, à moins que vous ne soyez très familiers avec l'analyseur, le scanneur et le jeu de caractère lui-même. Si vous vous connectez à une base de données avec &php;, il est recommandé d'utiliser le même jeu de caractères pour la base de données et pour le jeu interne pour améliorer le confort d'utilisation mais aussi les performances. Si vous utilisez PostgreSQL, le jeu de caractères utilisé dans la base de données et celui de &php; peuvent différer car cette base supporte la traduction automatique de jeu de caractères.
&reference.mbstring.configure; &reference.mbstring.ini;
&reftitle.resources; &no.resource;
&reference.mbstring.constants;
Entrées/Sorties HTTP La conversion automatique des entrées/sorties HTTP peut aussi convertir des données binaires. Les utilisateurs doivent contrôler les conversions, si des données binaires doivent être utilisées via HTTP. Depuis la version 4.3.2 de &php;, il y a une limitation dans l'utilisation des fonctionnalités mbstring : l'encodage ne sera pas effectué dans les données transmises en méthode POST si l'attribut enctype de la balise form vaut multipart/form-data. Donc, vous devrez convertir les données entrantes vous-même dans ce cas, si nécessaire. Depuis la version 4.3.3 de &php;, si l'attribut enctype de la balise form vaut multipart/form-data et que la directive du &php.ini; est positionnée à On, les variables et les noms de fichiers téléchargés en méthode POST seront convertis avec l'encodage interne. Sinon, la conversion ne sera pas faite. Entrée HTTP Il n'y a pas de moyens de contrôler la conversion des caractères HTTP en entrée, depuis un script &php;. Pour désactiver cette conversion, il faut le faire dès le fichier &php.ini;. Désactive la conversion HTTP dans le php.ini Lorsque vous utilisez &php; comme module Apache, il est possible d'annuler la configuration du &php.ini; pour chaque Virtual Host dans le fichier &httpd.conf; ou par dossier avec le fichier .htaccess. Reportez-vous à la section de configuration ainsi qu'au manuel Apache. Sorties HTTP Il y a plusieurs moyens d'activer la conversion en sortie de script &php;. L'un d'entre eux utilise &php.ini;, un autre utilise ob_start avec la fonction mb_output_handler comme fonction de call-back. Pour les utilisateurs PHP3-i18n, le système de conversion de mbstring diffère de celui de PHP3-i18n. Le jeu de caractère est converti avec un buffer de sortie. Exemple de configuration de mbstring dans &php.ini; Exemple de script avec mbstring ]]>
Jeux de caractères supportés Actuellement, les jeux de caractères suivants sont supportés par mbstring. L'encodage de caractère peut être spécifié par les paramètres encoding dans les fonctions mbstring. Les jeux de caractères suivants sont supportés par mbstring : UCS-4 UCS-4BE UCS-4LE UCS-2 UCS-2BE UCS-2LE UTF-32 UTF-32BE UTF-32LE UTF-16 UTF-16BE UTF-16LE UTF-7 UTF7-IMAP UTF-8 ASCII EUC-JP SJIS eucJP-win SJIS-win ISO-2022-JP JIS ISO-8859-1 ISO-8859-2 ISO-8859-3 ISO-8859-4 ISO-8859-5 ISO-8859-6 ISO-8859-7 ISO-8859-8 ISO-8859-9 ISO-8859-10 ISO-8859-13 ISO-8859-14 ISO-8859-15 byte2be byte2le byte4be byte4le BASE64 HTML-ENTITIES 7bit 8bit EUC-CN CP936 HZ EUC-TW CP950 BIG-5 EUC-KR UHC (CP949) ISO-2022-KR Windows-1251 (CP1251) Windows-1252 (CP1252) CP866 (IBM866) KOI8-R Toutes les entrées du &php.ini; qui acceptent un nom d'encodage peuvent également utiliser les valeurs "auto" et "pass". Les fonctions mbstring, qui acceptent des noms de jeux de caractères, peuvent également utiliser la valeur "auto". Si "pass" est utilisée, aucune conversion n'est effectuée. Si "auto" est défini, la liste sera étendue à la liste des encodages définis par NLS. Par exemple, si NLS vaut Japanese, les valeurs seront "ASCII,JIS,UTF-8,EUC-JP,SJIS". Voir aussi mb_detect_order.
Exploitation des chaînes multi-octets en &php; Vous pourriez trouver difficile de faire fonctionner une application &php; existante dans un environnement multi-octets. Ceci est dû au fait que la plupart des applications &php; sont écrites avec des fonctions de chaînes de caractères standards comme la fonction substr, qui est connue pour ne pas gérer proprement les chaînes multi-octets. Mbstring supporte aussi la surcharge de fonctions, pour permettre le support des chaînes multi-octets sans modifier les scripts &php;. En utilisant ce système de surcharge de fonctions, certaines fonctions &php; seront remplacées par leur équivalent de mbstring. Par exemple mb_substr remplacera substr. Ce système de remplacement transparent, permet un portage simple et efficace des applications. Pour utiliser la surcharge de fonctions, définissez mbstring.func_overload, dans le &php.ini;, à une valeur positive qui représente une combinaison de masques d'octets spécifiant les catégories de fonctions à surcharger. Il doit être définit à 1 pour surcharger la fonction mail, 2 pour les fonction de chaînes, 4 pour les fonctions d'expression rationnelles. Par exemple, avec la valeur 7, toutes les fonctions précédentes seront surchargées. Voici la liste complète des fonctions surchargées, avec leur fonction de remplacement. Fonctions de remplacement Valeur de mbstring.func_overload Fonction originale Fonction de remplacement 1 mail mb_send_mail 2 strlen mb_strlen 2 strpos mb_strpos 2 strrpos mb_strrpos 2 substr mb_substr 2 strtolower mb_strtolower 2 strtoupper mb_strtoupper 2 substr_count mb_substr_count 4 ereg mb_ereg 4 eregi mb_eregi 4 ereg_replace mb_ereg_replace 4 eregi_replace mb_eregi_replace 4 split mb_split
Il n'est pas recommandé d'utiliser les options des fonctions d'overloading dans un contexte de per-directory, car il n'est pas confirmé encore qu'elles sont suffisamment stables dans un environnement de production et peuvent conduire à un résultat incohérent.
Cas des caractères japonais Les caractères japonais ne peuvent être représentés qu'avec des encodages multi-octets et les standards d'encodage multiple sont utilisés suivant la plateforme et le texte de référence. Pour facilité les choses, ces standards d'encodages diffèrent légèrement les uns des autres. Pour développer des applications Web en environnement japonais, le développeur devra garder à l'esprit ces complexités afin de s'assurer que l'encodage de caractères correct est utilisé. La taille nécessaire à un caractère peut aller jusqu'à 4 octets. Un caractère japonais multi-octets occupe généralement deux octets, à comparer avec les caractères simple-octet traditionnellement utilisés. Ces caractères sont appelés "zen-kaku", ce qui signifie "grande largeur". Les plus petits sont appelés "han-kaku", ce qui signifie "demi-largeur". Certains encodages de caractères utilisent des séquences "shift" (escape) définies dans la référence ISO-2022 pour basculer vers la carte d'encodage du code spécifique (00h to 7fh). ISO-2022-JP doit être utilisé pour les protocoles SMTP/NNTP, et les en-têtes ainsi que les entités devraient être réencodés en accord avec la RFC correspondante. Bien que cela ne soit pas requis, ça reste une bonne idée car beaucoup de user-agent (agents utilisateurs) populaires ne peuvent pas reconnaître d'autre méthode d'encodage. Les pages Web créées pour les téléphones portables comme i-mode, Vodafone live!, ou EZweb sont supposées utiliser l'encodage Shift_JIS.
Références Les jeux de caractères multi-octets et leurs techniques sont très complexes et ne peuvent être traités totalement dans cette documentation. Reportez-vous aux URL suivantes pour d'autres ressources complémentaires : Unicode/UTF/UCS/etc &url.unicode; Japonais/coréen/Chinois &url.oreilly.cjk-inf;
&reference.mbstring.encodings;
&reference.mbstring.functions;