|
|
LIII. Cha�nes de caract�res multi-octetsAvertissement | 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. |
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 :
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 :
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.
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 sites web en "i-mode" utilisent Shift_JIS.
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 :
User Contributed Notes Cha�nes de caract�res multi-octets |
|
[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!
|
|
|
| |