|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
LIV. Chaînes de caractères multi-octetsIntroductionMê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 des chaînes multi-octets pour PHP, qui ne supporte que les jeux mon-octets. De plus, mbstring gère la traduction entre les jeux de caractères disponibles. mbstring est aussi conû pour gérer l'Unicode, comme UTF-8 et UCS-2 ainsi que de nombreux autres jeux mono-octets, même si mbstring a été conçu à la base pour les pages web japonaises. Pré-requis de l'encodage en PHPLes jeux de caractères suivants sont bien supportés par PHP.
Les jeux de caractères suivants 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.
Installationmbstring est un module PHP. Vous devez activer le module avec le script de configuration configure. Reportez vous à la section installation pour plus de détails. Les options de configurations suivantes sont liées au module mbstring.
Configuration à l'exécutionLe comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.
Tableau 1. Options de configuration
Voici un éclaircissement sur l'utilisation des directives de configuration.
En accord avec HTML 4.01 specification, les navigateurs sont supposés utiliser le même jeu de caractères lorsqu'ils soumettent un formulaire. Mais, tous les navigateurs ne le font pas. Reportez vous à la fonction mb_http_input() pour détecter les jeux de caractères utilisé par les navigateurs. En général, les navigateurs sont suffisament intelligent pour détecter les jeux de caractères dans le HTML. Si charset est activé dans les en-têtes, cela donnera de meilleurs résultats. Changez la valeur de default_charset avec la valeur appropriée dans le fichier ini.
Types de ressourcesCette extension ne définit aucune ressource. Constantes prédefiniesCes constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution. Entrées/Sorties HTTPLa conversion automatiques des entrées/sorties HTTP peuvent aussi convertir des données binaires. Les utilisateurs doivent contrôler les conversions, si des données binaires doivent être utilisées via HTTP.
Jeux de caractères supportésActuellement, 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 :
Les entrées du fichiers php.ini, qui acceptent des noms de jeux de caractères, acceptent aussi les valeurs "auto" et "pass". Les fonctions mbstring,qui acceptent des noms de jeux de caractères, acceptent aussi 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 PHPComme presque tout PHP est écrit pour des langues qui sont simple octets, il y a des difficultés à gérer le japonais. Toutes les fonctions PHP de gestion des chaînes de caractères, comme par exemple substr() ne supportent par les chaînes multi octets. L'extension Multibyte (multi-octets, alias mbstring) dispose de fonctions de chaînes, qui supportent le multi-octet, comme mb_substr(), qui est un remplaçant de substr(). mbstring supporte aussi le remplacement de fonction, pour permettre le support des chaînes multi-octets sans modifier les scripts PHP. En utilisant ce système de remplacement de fonctions, certains 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. mbstring.func_overload, dans le php.ini, doit être configuré avec une valeur positive : 1 remplace la fonction d'envoi de mail; 2 active les fonction de chaînes; 4 active les fonctions d'expression régulières. Par exemple, avec la valeur 7, toutes les fonctions possibles sont remplacées. Voici la liste complète des fonctions remplacées, avec leur fonction de remplacement. Tableau 2. Fonctions de remplacement
Cas des caractères japonaisLa plupart des caractères japonais demandent plus d'un octet pour être représentés. De plus, plusieurs jeux de caractères japonais existent : il y a notamment EUC-JP, Shift_JIS et ISO-2022-JP. Unicode devient de plus en plus populaire, et UTF-8 aussi. Pour développer des applications Web en environnement japonais, il faut savoir que les encodages ci-dessus dépendent de l'application qu'on en fait : entrée/sortie HTTP, bases de données ou courrier électronique.
RéférencesLes jeux de caractères multi-octets et leurs techniques sont très complexes. Il n'est pas possible de couvrir tous les aspects en détails ici. Reportez-vous aux URL suivantes, pour d'autres ressouces complémentaires :
Jeux de caractères supportésJeux de caractères supportés Nom dans le registre IANA: ISO-10646-UCS-4 Jeux de caractères: ISO 10646 Description: Le jeu de caractères universel (Universal Character Set), avec 31 bits par caractère, au standard UCS-4 par ISO/IEC 10646. Il est synchronisé avec la dernière version d'Unicode. Notes: Si ce nom est utilisé dans l'outil de conversion, le convertisseur essaie de reconnaitre le texte à partir de dernier BOM (byte order mark), pour connaître l'ordre des bits. Nom dans le registre IANA: ISO-10646-UCS-4 Jeux de caractères: UCS-4 Description: Voir ci-dessus. Notes: Contrairement à UCS-4, les chaînes sont supposées être au format big endian. Nom dans le registre IANA: ISO-10646-UCS-4 Jeux de caractères: UCS-4 Description: Voir ci-dessus. Notes: Contrairement à UCS-2, les chaînes sont supposées être au format little endian. Nom dans le registre IANA: ISO-10646-UCS-2 Jeux de caractères: UCS-2 Description: Le jeu de caractères universel (Universal Character Set), avec 16 bits par caractère, au standard UCS-2 par ISO/IEC 10646. Il est synchronisé avec la dernière version d'Unicode. Notes: Si ce nom est utilisé dans l'outil de conversion, le convertisseur essaie de reconnaitre le texte à partir de dernier BOM (byte order mark), pour connaître l'ordre des bits. Nom dans le registre IANA: ISO-10646-UCS-2 Jeux de caractères: UCS-2 Description: Voir ci-dessus. Notes: Contrairement à UCS-4, les chaînes sont supposées être au format big endian. Nom dans le registre IANA: UTF-32 Jeux de caractères: Unicode Description: Format de transformation d'Unicode, de 32 bits, dont les cartes correspondent au jeu stantder Unicode. Ce jeu n'est pas identique à UCS-4 car les caractères Unicode étaient limités à des valeurs de 21 bits. Notes: Si ce nom est utilisé dans l'outil de conversion, le convertisseur essaie de reconnaitre le texte à partir de dernier BOM (byte order mark), pour connaître l'ordre des bits. Nom dans le registre IANA: UTF-32BE Jeux de caractères: Unicode Description: Voir ci-dessus. Notes: Contrairement à UTF-32, les chaînes sont supposées être au format big endian. Nom dans le registre IANA: UTF-32LE Jeux de caractères: Unicode Description: Voir ci-dessus. Notes: Contrairement à UTF-32, les chaînes sont supposées être au format little endian. Nom dans le registre IANA: UTF-16 Jeux de caractères: Unicode Description: Format de transformation d'Unicode sur 16 bits. Il faut noter que UTF-16 n'est plus identique à UCS-2 car un mécanisme a été introduit en Unicode 2.0 et UTF-16 fait maintenant référence à un codage de 21 bits. Notes: Si ce nom est utilisé dans l'outil de conversion, le convertisseur essaie de reconnaitre le texte à partir de dernier BOM (byte order mark), pour connaître l'ordre des bits. Nom dans le registre IANA: UTF-16BE Jeux de caractères: Unicode Description: Voir ci-dessus. Notes: Contrairement à UTF-16, les chaînes sont supposées être au format big endian. Nom dans le registre IANA: UTF-16BE Jeux de caractères: Unicode Description: Voir ci-dessus. Notes: Contrairement à UTF-16, les chaînes sont supposées être au format big endian. Nom dans le registre IANA: UTF-8 Jeux de caractères: Unicode / UCS Description: Format de transformation Unicode de 8 bits. Notes: none Nom dans le registre IANA: UTF-7 Jeux de caractères: Unicode Description: Un format compatible avec le courrier éléctronique d'Unicode, spécifié dans RFC2152. Notes: none Nom dans le registre IANA: aucun Jeux de caractères: Unicode Description: Une variante d'UTF-7 qui est spécialement utilisé dans le protocole IMAP. Notes: none Nom dans le registre IANA: US-ASCII (recommandé) / iso-ir-6 / ANSI_X3.4-1986 / ISO_646.irv:1991 / ASCII / ISO646-US / us / IBM367 / CP367 / csASCII Jeux de caractères: ASCII / ISO 646 Description: ASCII, American Standard Code for Information Interchange est un format classique de 7 bits. Il est aussi normalisé internationalement, sous le nom ISO 646. Notes: (none) Nom dans le registre IANA: EUC-JP (recommandé) / Extended_UNIX_Code_Packed_Format_for_Japanese / csEUCPkdFmtJapanese Jeux de caractères: Composé de US-ASCII / JIS X0201:1997 (hankaku kana) / JIS X0208:1990 / JIS X0212:1990 Description: Comme vous le voyez, le nom est dérivé de l'abréviation de Extended UNIX Code Packed Format for Japanese, ce jeu est essentiellement utilisé sur les plate-formes Unix. Le jeu original, Extended UNIX Code, est conçu sur la base de ISO 2022. Notes: Le jeu identifié par EUC-JP est différent de IBM932 / CP932, qui est utilisé par OS/2® et Microsoft® Windows®. Pour échanger des informations avec ces plate-formes, utilisez EUCJP-WIN. Nom dans le registre IANA: Shift_JIS (recommandé) / MS_Kanji / csShift_JIS Jeux de caractères: Composé de JIS X0201:1997 / JIS X0208:1997 Description: Shift_JIS a été développé au début des années 80, et au même moment, les premiers traitements de textes étaient mis sur le marché. Il a été fait pour conserver la compatibilité avec le jeu JIS X 0201:1976. Selon la définition de l'IANA, le jeu de caractères Shift_JIS est légèrement différent de IBM932 / CP932. Cependant, les noms "SJIS" et "Shift_JIS" sont souvent utilisés à tort, pour ces jeux. Notes: Pour CP932, utilisez SJIS-WIN. Nom dans le registre IANA: (none) Jeux de caractères: Composé de JIS X0201:1997 / JIS X0208:1997 / IBM extensions / NEC extensions Description: Même si ce "jeu de caractères" utilise le même jeu que EUC-JP, il est en fait différent. Il a juste quelques caractères de différence. Notes: none Nom dans le registre IANA: Windows-31J / csWindows31J Jeux de caractères: Composé de JIS X0201:1997 / JIS X0208:1997 / IBM extensions / NEC extensions Description: Même si ce "jeu de caractères" utilise le même jeu que Shift_JIS, il est en fait différent. Il a juste quelques caractères de différence. Notes: (none) Nom dans le registre IANA: ISO-2022-JP (recommandé) / csISO2022JP Jeux de caractères: US-ASCII / JIS X0201:1976 / JIS X0208:1978 / JIS X0208:1983 Description: RFC1468 Notes: aucun Nom dans le registre IANA: JIS Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-1 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-2 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-3 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-4 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-5 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-6 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-7 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-8 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-9 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-10 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-13 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-14 Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-8859-15 Jeux de caractères: Description: Notes: Nom dans le registre IANA: byte2be Jeux de caractères: Description: Notes: Nom dans le registre IANA: byte2le Jeux de caractères: Description: Notes: Nom dans le registre IANA: byte4be Jeux de caractères: Description: Notes: Nom dans le registre IANA: byte4le Jeux de caractères: Description: Notes: Nom dans le registre IANA: BASE64 Jeux de caractères: Description: Notes: Nom dans le registre IANA: HTML-ENTITIES Jeux de caractères: Description: Notes: Nom dans le registre IANA: 7bit Jeux de caractères: Description: Notes: Nom dans le registre IANA: 8bit Jeux de caractères: Description: Notes: Nom dans le registre IANA: EUC-CN Jeux de caractères: Description: Notes: Nom dans le registre IANA: CP936 Jeux de caractères: Description: Notes: Nom dans le registre IANA: HZ Jeux de caractères: Description: Notes: Nom dans le registre IANA: EUC-TW Jeux de caractères: Description: Notes: Nom dans le registre IANA: CP950 Jeux de caractères: Description: Notes: Nom dans le registre IANA: BIG-5 Jeux de caractères: Description: Notes: Nom dans le registre IANA: EUC-KR Jeux de caractères: Description: Notes: Nom dans le registre IANA: UHC (CP949) Jeux de caractères: Description: Notes: Nom dans le registre IANA: ISO-2022-KR Jeux de caractères: Description: Notes: Nom dans le registre IANA: Windows-1251 (CP1251) Jeux de caractères: Description: Notes: Nom dans le registre IANA: Windows-1252 (CP1252) Jeux de caractères: Description: Notes: Nom dans le registre IANA: CP866 (IBM866) Jeux de caractères: Description: Notes: Nom dans le registre IANA: KOI8-R Jeux de caractères: Description: Notes:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||