Manuel PHP

Table des matières

Préface
I. Au moment de commencer
II. Installation et configuration
III. Référence du langage
IV. Sécurité
V. Caractéristiques
VI. Référence des fonctions
VII. PHP et le moteur interne Zend
VIII. FAQ : foire Aux Questions
IX. Annexes
Remerciements



XCIV. Chaînes de caractères multi-octets

Introduction

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.

Exemple 1. Jeux de caractères qui risquent de ne pas fonctionner en PHP JIS, SJIS, ISO-2022-JP, BIG-5

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.

Note : 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.
Note : 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.

Installation

“mbstring” 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”.

  • “–enable-mbstring” : Active les fonctions “mbstring”. Cette option est nécessaire pour utiliser les fonctions “mbstring”.

libmbfl est nécessaire pour “mbstring”. libmbfl est inclus avec “mbstring”. Si libmbfl est déjà installé sur le système, “–with-libmbfl[=DIR]” peut être spécifié pour utiliser la bibliothèque istallée.
À partir de PHP 4.3.0, l’extension “mbstring” fournit le support pour le chinois simplifié, le chinois traditionnel, le coréen et le russe en plus du japonais.
Pour PHP 4.3.3 ou inférieur, pour activer cette fonctionnalité, vous devez fournir une des options suivantes dans le paramètres “LANG” de “–with-mbstring=LANG” : “–with-mbstring=cn” pour le support du chinois simplifié, “–with-mbstring=tw” pour le support du chinois traditionnel, “–with-mbstring=kr” pour le support du coréen, “–with-mbstring=ru” pour le support du russe et “–enable-mbstring=ja” pour le support du japonais (par défaut). Pour activer le support de tous ces encodages, utilisez “–enable-mbstring=all”.
>Note : Depuis PHP 4.3.4, tous les encodages supportés par libmbfl sont activables avec l’option “–enable-mbstring”.

  • “–enable-mbstr-enc-trans” : Active la conversion automatique des données par HTTP, avec le moteur de conversion de “mbstring”. Si cette option est activée, les données venant du web via HTTP seront converties dans le jeu de caractères “mbstring.internal_encoding”, automatiquement.
    >Note : Depuis PHP 4.3.0, l’option “–enable-mbstr-enc-trans” sera éliminée, et remplacée par “mbstring.encoding_translation”. La conversion de jeu de caractères d’entrée HTTP sera activée lorsque cette option sera à “On” (par défaut, cette option vaut”Off”).
  • “–disable-mbregex” : Désactive les fonctions d’expressions rationnelles, compatibles avec les caractères multi-octets.

Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier “php.ini”.

Tableau 1. Options de configuration

Nom Par défaut Modifiable Historique
mbstring.language “neutral” PHP_INI_PERDIR Disponible depuis PHP 4.3.0
mbstring.detect_order NULL PHP_INI_ALL Disponible depuis PHP 4.0.6
mbstring.http_input “pass” PHP_INI_ALL Disponible depuis PHP 4.0.6
mbstring.http_output “pass” PHP_INI_ALL Disponible depuis PHP 4.0.6
mbstring.internal_encoding NULL PHP_INI_ALL Disponible depuis PHP 4.0.6
mbstring.script_encoding NULL PHP_INI_ALL Disponible depuis PHP 4.3.0
mbstring.substitute_character NULL PHP_INI_ALL Disponible depuis PHP 4.0.6
mbstring.func_overload “0” PHP_INI_PERDIR PHP_INI_SYSTEM en PHP <= 4.2.3. Disponible depuis PHP 4.2.0
mbstring.encoding_translation “0” PHP_INI_PERDIR Disponible depuis PHP 4.3.0
mbstring.strict_detection “0” PHP_INI_ALL Disponible depuis PHP 5.1.2.

Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à Annexe G.

Voici un éclaircissement sur l’utilisation des directives de configuration.

“mbstring.language” string

Définit le langage utilisé par mbstring. Notez que cette option définit “mbstring.internal_encoding” “mbstring.internal_encoding” doit être placé après “mbstring.language” dans le fichier “php.ini”

“mbstring.encoding_translation” boolean

Active la détection et la traduction des données d’entrées HTTP vers le codage interne mbstring.

“mbstring.internal_encoding” string

Définit l’encodage interne par défaut.

“mbstring.http_input” string

Définit l’encodage de réception HTTP par défaut.

“mbstring.http_output” string

Définit l’encodage d’affichage HTTP par défaut.

“mbstring.detect_order” string

Définit l’ordre de détection des encodages par défaut. Voir aussi mb_detect_order().

“mbstring.substitute_character” string

Définit l’encodage de substitution par défaut : il est utilisé pour les caractères invalides.

“mbstring.func_overload” string

“mbstring.strict_detection” booléen

Active la détection stricte de l’encodage.

Exemple 2. Configuration de “php.ini” pour mbstring ; Langage par défaut mbstring.language = Neutral; (UTF-8) (par défaut) mbstring.language = English; Anglais mbstring.language = Japanese; Japonais ;; Jeu de caractère interne ;; Note : assurez-vous que ce jeu fonctionne avec PHP mbstring.internal_encoding = UTF-8 ;; Activation de la conversion automatique des entrées HTTP mbstring.encoding_translation = On ;; Jeu de caractères par défaut pour les données d’entrée HTTP ;; Note : le script ne peux pas changer cette configuration mbstring.http_input = pass ; Aucune conversion. mbstring.http_input = auto ; Utilise auto ; “auto” est remplacé par “ASCII,JIS,UTF-8,EUC-JP,SJIS” mbstring.http_input = SJIS ; Utilise SJIS mbstring.http_input = UTF-8,SJIS,EUC-JP ; Spécifie l’ordre ;;Jeu de caractères par défaut pour les données de sortie HTTP mbstring.http_output = pass ; Aucune conversion mbstring.http_output = UTF-8 ; Utilise UTF-8 ;; Ordre de détection des jeux de caractères mbstring.detect_order = auto ; Utilise la détection automatique mbstring.detect_order = ASCII,JIS,UTF-8,SJIS,EUC-JP ; Spécifie l’ordre ;; Déterminer le jeu de caractères de substitution par défaut mbstring.substitute_character = 12307 ; Spécifie une valeur Unicode mbstring.substitute_character = none ; Ne pas afficher de caractères mbstring.substitute_character = long ; Exemple complet : U+3000,JIS+7E7E


Exemple 3. Configuration de “php.ini” pour les utilisateurs de “EUC-JP” ;; Désactive la bufferisation de sortie output_buffering = Off ;; Choisit le jeu de caractères default_charset = EUC-JP ;; Le langage par défaut est le japonais mbstring.language = Japanese ;; Activation de la traduction automatique des données d’entrée HTTP mbstring.encoding_translation = On ;; Activation de la conversion automatique mbstring.http_input = auto ;; Convertit les sorties en EUC-JP mbstring.http_output = EUC-JP ;; Utilise le jeu de caractères interne EUC-JP mbstring.internal_encoding = EUC-JP ;; Ne pas afficher les caractères invalides mbstring.substitute_character = none


Exemple 4. Configuration de “php.ini” pour les utilisateurs de “SJIS” ;; Active la bufferisation de sortie output_buffering = On ;; Utilise le gestionnaire mb_output_handler pour la conversion de sortie output_handler = mb_output_handler ;; Choisit le jeu de caractères default_charset = Shift_JIS ;; Le langage par défaut est le japonais mbstring.language = Japanese ;; Activation de la traduction automatique des données d’entrée HTTP mbstring.http_input = auto ;; Convertit en SJIS mbstring.http_output = SJIS ;;Utilise le jeu de caractères interne EUC-JP mbstring.internal_encoding = EUC-JP ;; Ne pas afficher les caractères invalides mbstring.substitute_character = none

Types de ressources

Cette extension ne définit aucune ressource.

Constantes pré-définies

Ces 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.

MB_OVERLOAD_MAIL” (entier)

MB_OVERLOAD_STRING” (entier)

MB_OVERLOAD_REGEX” (entier)

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.

Note : 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”.

| **Exemple 5. Désactive la conversion HTTP dans le php.ini ** | 

;; Désactive la conversion HTTP mbstring.http_input = pass ;; Désactive la conversion HTTP (PHP 4.3.0 ou plus récent) mbstring.encoding_translation = Off ::
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.
>Note : 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.

mb_check_encoding – Vérifie si une chaîne est valide pour un encodage spécifiquemb_convert_case – Modifie la casse d’une chaînemb_convert_encoding – Conversion d’encodagemb_convert_kana –  Convertit entre les différents “kana” mb_convert_variables – Convertit l’encodage de variablesmb_decode_mimeheader – Décode un en-tête MIMEmb_decode_numericentity –  Décode les entités HTML en caractères mb_detect_encoding – Détecte un encodagemb_detect_order –  Lit/modifie l’ordre de détection des encodages mb_encode_mimeheader – Encode une chaîne pour un en-tête MIMEmb_encode_numericentity –  Encode des entités HTML mb_ereg_match –  Expression rationnelle POSIX pour les chaînes multi-octets mb_ereg_replace – Remplace des segments de chaînes, avec le support des expressions rationnelles mutli-octetsmb_ereg_search_getpos –  Retourne l’offset du début du prochain segment repéré par une expression rationnelle mb_ereg_search_getregs –  Lit le dernier segment de chaîne multi-octets qui correspond au masque mb_ereg_search_init –  Configure les chaînes et les expressions rationnelles pour le support des caractères multi-octets mb_ereg_search_pos –  Retourne la position et la longueur du segment de chaîne qui vérifie le masque de l’expression rationnelle mb_ereg_search_regs –  Retourne le segment de chaîne trouvé par une expression rationnelle multi-octets mb_ereg_search_setpos – Choisit le point de départ de la recherche par expression rationnellemb_ereg_search –  Recherche par expression rationnelle multi-octets mb_ereg – Recherche par expression rationnelle avec support des caractères multi-octetsmb_eregi_replace –  Expression rationnelle avec support des caractères multi-octets, sans tenir compte de la casse mb_eregi –  Expression rationnelle insensible à la casse avec le support des caractères multi-octets mb_get_info – Lit la configuration interne de l’extension mbstringmb_http_input – Détecte le type d’encodage d’un caractère HTTPmb_http_output – Lit/modifie l’encodage d’affichagemb_internal_encoding –  Lit/modifie l’encodage interne mb_language – Lit/modifie le langage courantmb_list_encodings_alias_names – Returns an array of all supported alias encodingsmb_list_encodings –  Retourne un tableau contenant tous les encodages supportés mb_list_mime_names – Returns an array or string of all supported mime namesmb_output_handler –  Fonction de traitement des affichages mb_parse_str –  Analyse les données HTTP GET/POST/COOKIE et assigne les variables globales mb_preferred_mime_name – Détecte l’encodage MIMEmb_regex_encoding –  Retourne le jeu de caractères courant pour les expressions rationnelles mb_regex_set_options –  Lit et modifie les options des fonctions d’expression rationnelle à support de caractères multi-octets mb_send_mail – Envoie un mail encodémb_split – Scinde une chaîne en tableau avec une expression rationnelle multi-octetsmb_strcut – Coupe une partie de chaînemb_strimwidth – Tronque une chaînemb_stripos – Trouve la première occurence d’une chaîne dans une autre, sans tenir compte de la cassemb_stristr – Trouve la première occurece d’une chaîne dans une autre, sans tenir compte de la cassemb_strlen – Retourne la taille d’une chaînemb_strpos –  Repère la première occurrence d’un caractère dans une chaîne mb_strrchr – Trouve la dernière occurence d’un caractère d’une chaîne dans une autremb_strrichr – Trouve la dernière occurence d’un caractère d’une chaîne dans une autre, insensible à la cassemb_strripos – Trouve la position de la dernière occurence d’une chaîne dans une autre, en tenant compte de la cassemb_strrpos –  Repère la dernière occurrence d’un caractère dans une chaîne mb_strstr – Trouve la première occurence d’une chaîne dans une autremb_strtolower – Met tous les caractères en minusculesmb_strtoupper – Met tous les caractères en majusculesmb_strwidth – Retourne la largeur d’une chaînemb_substitute_character – Lit/modifie les caractères de substitutionmb_substr_count – Compte le nombre d’occurrences d’une sous-chaînemb_substr – Lit une sous-chaîne

Travail collaboratif

Contribuez, en ajjoutant des elements a cette page de manuel :

Merci de votre aide
L’equipe Php.fr

 


Index | Afficher le texte source | Anciennes révisions | Derniers changements | Connexion
©2007 Wiki Copyright