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

Avertissement

Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS! Soyez-en conscient, et utiliser ce module à vos risques et périls.

Introduction

Avertissement

Ce module est expérimental. Les noms des fonctions sont sujets à des changaments probables. Actuellement, les conversions ne supportent que le Japonais.

De nombreuses langues dont les signes ne peuvent pas être exprimés sur un seul octet. Des codes multi-octets sont utilisés pour pallier à cette insuffisance. mbstring est développé pour supporter les caractères japonais. Cependant, de nombreuses fonctions mbstring peuvent supporter d'autres jeux de caractères.

Les jeux de caractères multi-octets représentent les caractères sur plusieurs octets consécutifs (d'où leur nom). Certains systèmes d'encodages ont des caractères d'échappement dédiés, pour démarrer/finir une séquence de caractères multi-octets. De ce fait, certains caractères peuvent être détruit lorsqu'une chaîne est coupée en plusieurs morceaux, ou bien conduire à des résultats erronnés lorsque le nombre de caractère est compté. Il faut utiliser des fonctions qui supportent ces encodages. Les fonctions mbstring supportent les jeux de caractères multi-octets, ainsi que les conversions.

Cas des caractères japonais

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

  • La taille nécessaire à un caractère peut aller jusqu'à 4 octets.

  • Un caractère multi-octets occupe généralement deux octets, à comparer avec les caractères simple-octet traditionnellement utilisé. Les caractères les plus gros sont appelés "zen-kaku" (i.e. grande largeur) et les plus petits sont appelés "han-kaku" (i.e. demi-largeur). Les caractères "zen-kaku" sont généralement de taille constante.

  • Certains encodage de caractères définissent des séquences de début/fin pour les sections multi-octets.

  • Les bases de données allouent des tailles de stockages différentes de celles utilisées par PHP, même si le même encodage de caractère est utilisé (par exemple, PostGreSQL).

  • Le courrier électronique utilise généralement ISO-2022-JP.

  • Les sites web en "i-mode" utilisent Shift_JIS.

Jeux de caractères supportés

Les jeux de caractères suivants sont supportés par cette extension PHP : UCS-4, UCS-4BE, UCS-4LE, UCS-2, UCS-2BE, UCS-2LE, UTF-32, UTF-32BE, UTF-32LE, UCS-2LE, UTF-16, UTF-16BE, UTF-16LE, UTF-8, UTF-7, 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.

Configuration du fichier php.ini

  • mbstring.internal_encoding définit le jeu de caractères interne par défaut.

  • mbstring.http_input définit le jeu de caractères d'entrée HTTP par défaut.

  • mbstring.http_output defines définit le jeu de caractères d'affichage HTTP par défaut.

  • mbstring.detect_order définit l'ordre de détection des jeux de caractères (lors de la lecture sur une source externe inconnue).

  • mbstring.substitute_character définit le caractère de substitution pour les codes invalides.

Exemple 1. Exemple de configuration du php.ini


;; Set default internal encoding
mbstring.internal_encoding    = UTF-8  ; Par défaut, to UTF-8
;; Set default HTTP input character code
mbstring.http_input = auto     ; Par défaut, mode automatique
; or
; mbstring.http_input = SJIS     ; Par défaut, HTTP fournit du code SJIS
; mbstring.http_input = eucjp-win, sjis-win, UTF-8 ; Ordre spécifique
;; Set default HTTP output character code
mbstring.http_output = UTF-8   ; Par défaut, HTTP affiche du code UTF-8
;; Set default character code detection order
mbstring.detect_order = auto   ; Par défaut, mode automatique
; or
; mbstring.detect_order = eucjp-win, sjis-win, UTF-8 ; Ordre spécifique
;; Set default substitute character
mbstring.substitute_character = 12307 ; Spécifie un code de caractère
; or
; mbstring.substitute_character = none  ; Caractère NULL
; mbstring.substitute_character = long  ; Long
    

Table des matières
mb_internal_encoding --  Lit/modifie l'encodage interne
mb_http_input -- Détecte le type d'encodage d'un caractère HTTP
mb_http_output -- Lit/modifie l'encodage d'affichage
mb_detect_order --  Lit/modifie l'ordre de détection des encodages
mb_substitute_character -- Lit/modifie les caractères de substitution
mb_output_handler --  Fonction de traitement des affichages web
mb_preferred_mime_name -- Détecte l'encodage MIME
mb_strlen -- Retourne la taille d'une chaîne
mb_strpos --  Repère la première occurence d'un caractère dans une chaîne
mb_strrpos --  Repère la dernière occurence d'un caractère dans une chaîne
mb_substr -- Lit une sous-chaîne
mb_strcut -- Coupe une partie de chaîne
mb_strwidth -- Retourne la largeur d'une chaîne
mb_strimwidth -- Tronque une chaîne
mb_convert_encoding -- Conversion d'encodage
mb_detect_encoding -- Détecte un encodage
mb_convert_kana --  Convertit entre les différents "kana"
mb_encode_mimeheader -- Encode une chaîne pour une en-tête MIME
mb_decode_mimeheader -- Décode une en-tête MIME
mb_convert_variables -- Convertit l'encodage de variables
mb_encode_numericentity --  Encode des entités HTML
mb_decode_numericentity --  Décode les entités HTML en caractères
mb_send_mail --  Envoie un mail encodé ISO-2022-JP (mail japonais)