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.
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.
Etant donné que PHP supporte essentiellement le jeu de
caractères ISO-8859-1, certains jeux de caractères
ne fonctionnent pas bien avec PHP. Par conséquent,
il est important de donner une valeur à l'option de configuration
mbstring.internal_encoding qui permettent à PHP de
travailler correctement.
Pré-requis PHP 4
Encodage par octet
Les caractères d'un octet dans l'intervalle 00h-7fh
doivent être compatibles avec le code ASCII
Jeux de caractères multi-octets, qui n'utilisent pas l'intervalle
00h-7fh.
Voici des exemples d'encodage internes :
Jeu de caractères qui fonctionnent avec PHP :
ISO-8859-*, EUC-JP, UTF-8
Jeu de caractères qui NE fonctionnent PAS avec PHP :
JIS, SJIS
Les jeux de caractères qui ne fonctionnent pas comme encodage interne
à PHP, peuvent toutefois être utilisé avec les fonctions de conversion
de mbstring.
Note :
SJIS ne doit pas être utilisé comme encodage interne, à
moins que vous ne soyez familier de l'analyseur/compilateur, et des
problèmes liés aux jeux de caractères.
Note :
SI vous utilisez une base de données avec PHP, il est recommandé
que vous utilisiez le même jeu de caractère pour la base de données
et le jeu de caractère interne de PHP, pour améliorer les performances.
Si vous utilisez PostgreSQL, il supporte des jeux de caractères qui
peuvent être différents de ceux du client. Reportez vous au manuel
de PostgreSQL pour plus de détails.
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.
--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 venants du web via HTTP seront converties dans le jeu
de caractères mbstring.internal_encoding, automatiquement.
La 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.
Si l'option enctype d'un formulaire HTML vaut
multipart/form-data,
mbstring ne convertira pas les données du POST. Dans ce
cas, les chaînes de caractères doivent être convertis manuellement.
Entrée HTTP
Il n'y a pas de moyen 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 1.
Inactive la conversion HTTP dans le php.ini
;; Inactive la conversion HTTP
mbstring.http_input = pass
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.
Exemple 2. Exemple de configuration de mbstring dans php.ini
;; Active la conversion de sortie pour toute les pages PHP
;; Active la bufferisation de sortie
output_buffering = On
;; Choisi mb_output_handler pour effectuer la conversion de sortie
output_handler = mb_output_handler
Exemple 3. Script example
<?php
// Active la conversion de caractère uniquement pour cette page
// Choisi le jeu de caractères SJIS
mb_http_output('SJIS');
// Commence la bufferisation et spécifie "mb_output_handler"
// comme fonction de callback
ob_start('mb_output_handler');
?>
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 :
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 utilisée, elle est remplacée
par "ASCII,JIS,UTF-8,EUC-JP,SJIS".
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.
Voir aussi la fonction mb_detect_order().
mbstring.substitute_character définit le
caractère de substitution pour les codes invalides.
Les navigateurs web utilisent tout le temps le même encodage lorsqu'ils
émettent les données d'un formulaire. Cependant, les navigateurs peuvent
ne pas tous utiliser le même encodage. Voyez la fonction
mb_http_input() pour détecter les jeux de caractères
utilisés par les navigateurs.
Si enctype vaut multipart/form-data dans
un formulaire HTML, mbstring n'effectue aucune conversion
des données. Il faut les faire manuellement, dans le script.
Bien que les navigateurs soivent généralement assez intelligents pour
détecter les jeux de caractères automatiquement,
il est recommandé de l'indiquer dans l'en-tête
charset. Modifiez default_charset
en fonction du jeu de caractères.
Exemple 4. Exemple de configuration php.ini pour mbstring
;; Set default internal encoding
;; Note: Make sure to use character encoding works with PHP
mbstring.internal_encoding = UTF-8 ; Set internal encoding to UTF-8
;; Set default HTTP input character encoding
;; Note: Script cannot change http_input setting.
mbstring.http_input = pass ; No conversion.
mbstring.http_input = auto ; Set HTTP input to auto
; "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS"
mbstring.http_input = SJIS ; Set HTTP2 input to SJIS
mbstring.http_input = UTF-8,SJIS,EUC-JP ; Specify order
;; Set default HTTP output character encoding
mbstring.http_output = pass ; No conversion
mbstring.http_output = UTF-8 ; Set HTTP output encoding to UTF-8
;; Set default character encoding detection order
mbstring.detect_order = auto ; Set detect order to auto
mbstring.detect_order = ASCII,JIS,UTF-8,SJIS,EUC-JP ; Specify order
;; Set default substitute character
mbstring.substitute_character = 12307 ; Specify Unicode value
mbstring.substitute_character = none ; Do not print character
mbstring.substitute_character = long ; Long Example: U+3000,JIS+7E7E
Exemple 5. Exemple de configuration php.ini pour
mbstring pour utiliser EUC-JP
;; Disable Output Buffering
output_buffering = Off
;; Set HTTP header charset
default_charset = EUC-JP
;; Set HTTP input encoding conversion to auto
mbstring.http_input = auto
;; Convert HTTP output to EUC-JP
mbstring.http_output = EUC-JP
;; Set internal encoding to EUC-JP
mbstring.internal_encoding = EUC-JP
;; Do not print invalid characters
mbstring.substitute_character = none
Exemple 6. Exemple de configuration php.ini pour
mbstring pour utiliser SJIS
;; Enable Output Buffering
output_buffering = On
;; Set mb_output_handler to enable output conversion
output_handler = mb_output_handler
;; Set HTTP header charset
default_charset = Shift_JIS
;; Set http input encoding conversion to auto
mbstring.http_input = auto
;; Convert to SJIS
mbstring.http_output = SJIS
;; Set internal encoding to EUC-JP
mbstring.internal_encoding = EUC-JP
;; Do not print invalid characters
mbstring.substitute_character = none
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 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 :