PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links 
search for in the  
previoustanhmb_convert_encodingnext
Last updated: Tue, 09 Jul 2002
view the printer friendly version or the printer friendly version with notes or change language to English | Brazilian Portuguese | Chinese | Czech | Dutch | Finnish | German | Hungarian | Italian | Japanese | Korean | Polish | Romanian | Russian | Spanish | Swedish | Turkish

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

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.

Comment activer mbstring

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.

Entr�es/Sorties HTTP

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');
?>

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, 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, byte2be, byte2le, byte4be, byte4le, BASE64, 7bit, 8bit et UTF7-IMAP.

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

Voir aussi mb_detect_order().

Note�: Un jeu de caract�re support� n'est pas forc�ment un bon choix comme jeu de caract�res interne.

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

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.

R�f�rences

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 :

  • Unicode/UTF/UCS/etc

    http://www.unicode.org/

  • Japanais/cor�en/Chinois

    ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/cjk.inf

Table des mati�res
mb_convert_encoding -- Conversion d'encodage
mb_convert_kana --  Convertit entre les diff�rents "kana"
mb_convert_variables -- Convertit l'encodage de variables
mb_decode_mimeheader -- D�code une en-t�te MIME
mb_decode_numericentity --  D�code les entit�s HTML en caract�res
mb_detect_encoding -- D�tecte un encodage
mb_detect_order --  Lit/modifie l'ordre de d�tection des encodages
mb_encode_mimeheader -- Encode une cha�ne pour une en-t�te MIME
mb_encode_numericentity --  Encode des entit�s HTML
mb_ereg_match --  Regular expression match for multibyte string
mb_ereg_replace -- Replace regular expression with multibyte support
mb_ereg_search_getpos --  Returns start point for next regular expression match
mb_ereg_search_getregs --  Retrive the result from the last multibyte regular expression match
mb_ereg_search_init --  Setup string and regular expression for multibyte regular expression match
mb_ereg_search_pos --  Return position and length of matched part of multibyte regular expression for predefined multibyte string
mb_ereg_search_regs --  Returns the matched part of multibyte regular expression
mb_ereg_search_setpos --  Set start point of next regular expression match
mb_ereg_search --  Multibyte regular expression match for predefined multibyte string
mb_ereg -- Regular expression match with multibyte support
mb_eregi_replace --  Replace regular expression with multibyte support ignoring case
mb_eregi --  Regular expression match ignoring case with multibyte support
mb_get_info -- Get internal settings of mbstring
mb_http_input -- D�tecte le type d'encodage d'un caract�re HTTP
mb_http_output -- Lit/modifie l'encodage d'affichage
mb_internal_encoding --  Lit/modifie l'encodage interne
mb_language -- Lit/modifie le langage courant
mb_output_handler --  Fonction de traitement des affichages web
mb_parse_str --  Analyse les donn�es HTTP GET/POST/COOKIE et assigne les variables globales
mb_preferred_mime_name -- D�tecte l'encodage MIME
mb_regex_encoding --  Returns current encoding for multibyte regex as string
mb_send_mail --  Envoie un mail encod� ISO-2022-JP (mail japonais)
mb_split -- Split multibyte string using regular expression
mb_strcut -- Coupe une partie de cha�ne
mb_strimwidth -- Tronque une cha�ne
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_strwidth -- Retourne la largeur d'une cha�ne
mb_substitute_character -- Lit/modifie les caract�res de substitution
mb_substr -- Lit une sous-cha�ne
User Contributed Notes
Cha�nes de caract�res multi-octets
add a note about notes
[email protected]
18-Oct-2001 08:54

Why would the use of multi byte strings NOT be open to different encodings when the document is "multipart/form-data"? Isn't this multibyte encoding supposed to make PHP more international? I hope this is an intermediate step, and later PHP will look in form data based on the encoding put into it.
[email protected]
16-Jul-2002 08:21

if you want to use any of the regex functions, be sure to also add
--enable-mbregex
when you configure!

add a note about notes
previoustanhmb_convert_encodingnext
Last updated: Tue, 09 Jul 2002
show source | credits | stats | mirror sites
Copyright © 2001, 2002 The PHP Group
All rights reserved.
This mirror generously provided by:
Last updated: Sat Aug 31 06:19:44 2002 CEST