mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-04-27 18:53:21 +02:00
080f2a9f69
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@140362 c90b9560-bf6c-de11-be94-00142212c4b1
503 lines
18 KiB
XML
503 lines
18 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- $Revision: 1.5 $ -->
|
|
<reference id="ref.mbstring">
|
|
<title>Chaînes de caractères multi-octets</title>
|
|
<titleabbrev>Chaînes de caractères multi-octets</titleabbrev>
|
|
<partintro>
|
|
<section id="mbstring.intro">
|
|
&reftitle.intro;
|
|
<para>
|
|
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. <literal>mbstring</literal>
|
|
est développé pour supporter les caractères japonais. Cependant,
|
|
de nombreuses fonctions <literal>mbstring</literal> peuvent supporter
|
|
d'autres jeux de caractères.
|
|
</para>
|
|
<para>
|
|
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
|
|
<literal>mbstring</literal> supportent les jeux de caractères
|
|
multi-octets, ainsi que les conversions.
|
|
</para>
|
|
<para>
|
|
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
|
|
<literal>mbstring.internal_encoding</literal> qui permettent à PHP de
|
|
travailler correctement.
|
|
</para>
|
|
<para>
|
|
Pré-requis PHP 4
|
|
</para>
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Encodage par octet
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Les caractères d'un octet dans l'intervalle <literal>00h-7fh</literal>
|
|
doivent être compatibles avec le code <literal>ASCII</literal>
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Jeux de caractères multi-octets, qui n'utilisent pas l'intervalle
|
|
<literal>00h-7fh</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
Voici des exemples d'encodage internes :
|
|
<example>
|
|
<title>Jeu de caractères qui fonctionnent avec PHP</title>
|
|
<programlisting>
|
|
<![CDATA[
|
|
Jeus 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
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Les jeux de caractères qui ne fonctionnent pas comme encodage interne
|
|
à PHP, peuvent toutefois être utilisé avec les fonctions de conversion
|
|
de <literal>mbstring</literal>.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</note>
|
|
</section>
|
|
|
|
&reference.mbstring.configure;
|
|
|
|
&reference.mbstring.ini;
|
|
|
|
<section id="mbstring.resources">
|
|
&reftitle.resources;
|
|
&no.resource;
|
|
</section>
|
|
|
|
&reference.mbstring.constants;
|
|
|
|
<section id="mbstring.http">
|
|
<title>Entrées/Sorties HTTP</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
Si l'option <literal>enctype</literal> d'un formulaire HTML vaut
|
|
<literal>multipart/form-data</literal>,
|
|
<literal>mbstring</literal> ne convertira pas les données du POST. Dans ce
|
|
cas, les chaînes de caractères doivent être convertis manuellement.
|
|
</para>
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Entrée HTTP
|
|
</simpara>
|
|
<para>
|
|
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;.
|
|
<example>
|
|
<title>
|
|
Désactive la conversion HTTP dans le php.ini
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
;; 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
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
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
|
|
<literal>.htaccess</literal>. Reportez vous à la section de
|
|
<link linkend="configuration">configuration</link> ainsi qu'au
|
|
manuel Apache.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Sorties HTTP
|
|
</simpara>
|
|
<para>
|
|
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 <function>ob_start</function> avec la fonction
|
|
<function>mb_output_handler</function> comme fonction de call-back.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Pour les utilisateurs PHP3-i18n, le système de conversion de
|
|
<literal>mbstring</literal> diffère de celui de PHP3-i18n.
|
|
Le jeu de caractère est converti avec un buffer de sortie.
|
|
</para>
|
|
</note>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Exemple de configuration de mbstring dans &php.ini;</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
;; 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
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Exemple de script avec mbstring</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?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');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</section>
|
|
<section id="mbstring.encodings">
|
|
<title>Jeux de caractères supportés</title>
|
|
<simpara>
|
|
Actuellement, les jeux de caractères suivants sont
|
|
supportés par <literal>mbstring</literal>. L'encodage
|
|
de caractère peut être spécifié
|
|
par les paramètres <literal>encoding</literal> dans les fonctions
|
|
<literal>mbstring</literal>.
|
|
</simpara>
|
|
<para>
|
|
Les jeux de caractères suivants sont supportés par
|
|
<literal>mbstring</literal> :
|
|
</para>
|
|
<para>
|
|
<literal>UCS-4</literal>, <literal>UCS-4BE</literal>,
|
|
<literal>UCS-4LE</literal>, <literal>UCS-2</literal>,
|
|
<literal>UCS-2BE</literal>, <literal>UCS-2LE</literal>,
|
|
<literal>UTF-32</literal>, <literal>UTF-32BE</literal>,
|
|
<literal>UTF-32LE</literal>, <literal>UCS-2LE</literal>,
|
|
<literal>UTF-16</literal>, <literal>UTF-16BE</literal>,
|
|
<literal>UTF-16LE</literal>, <literal>UTF-8</literal>,
|
|
<literal>UTF-7</literal>, <literal>ASCII</literal>,
|
|
<literal>EUC-JP</literal>, <literal>SJIS</literal>,
|
|
<literal>eucJP-win</literal>, <literal>SJIS-win</literal>,
|
|
<literal>ISO-2022-JP</literal>, <literal>JIS</literal>,
|
|
<literal>ISO-8859-1</literal>, <literal>ISO-8859-2</literal>,
|
|
<literal>ISO-8859-3</literal>, <literal>ISO-8859-4</literal>,
|
|
<literal>ISO-8859-5</literal>, <literal>ISO-8859-6</literal>,
|
|
<literal>ISO-8859-7</literal>, <literal>ISO-8859-8</literal>,
|
|
<literal>ISO-8859-9</literal>, <literal>ISO-8859-10</literal>,
|
|
<literal>ISO-8859-13</literal>, <literal>ISO-8859-14</literal>,
|
|
<literal>ISO-8859-15</literal>, <literal>byte2be</literal>,
|
|
<literal>byte2le</literal>, <literal>byte4be</literal>,
|
|
<literal>byte4le</literal>, <literal>BASE64</literal>,
|
|
<literal>7bit</literal>, <literal>8bit</literal> et
|
|
<literal>UTF7-IMAP</literal>.
|
|
</para>
|
|
<para>
|
|
Depuis PHP 4.3.0, les jeux de caractèrs suivants sont ajoutés, mais restent
|
|
expérimentaux :
|
|
<literal>EUC-CN</literal>, <literal>CP936</literal>, <literal>HZ</literal>,
|
|
<literal>EUC-TW</literal>, <literal>CP950</literal>, <literal>BIG-5</literal>,
|
|
<literal>EUC-KR</literal>, <literal>UHC</literal> (<literal>CP949</literal>),
|
|
<literal>ISO-2022-KR</literal>,
|
|
<literal>Windows-1251</literal> (<literal>CP1251</literal>),
|
|
<literal>Windows-1252</literal> (<literal>CP1252</literal>),
|
|
<literal>CP866</literal> et
|
|
<literal>KOI8-R</literal>.
|
|
</para>
|
|
<para>
|
|
Les entrées du fichiers &php.ini;, qui acceptent des
|
|
noms de jeux de caractères, acceptent aussi les valeurs
|
|
"<literal>auto</literal>" et
|
|
"<literal>pass</literal>".
|
|
Les fonctions <literal>mbstring</literal>,qui acceptent des
|
|
noms de jeux de caractères, acceptent aussi la valeur
|
|
"<literal>auto</literal>"/
|
|
</para>
|
|
<para>
|
|
Si "<literal>pass</literal>" est utilisée, aucune conversion
|
|
n'est effectuée.
|
|
</para>
|
|
<para>
|
|
Si "<literal>auto</literal>" est utilisée, elle est remplacée
|
|
par "<literal>ASCII,JIS,UTF-8,EUC-JP,SJIS</literal>".
|
|
</para>
|
|
<para>
|
|
Voir aussi <function>mb_detect_order</function>.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Un jeu de caractère supporté n'est pas forcément un bon choix comme
|
|
jeu de caractères interne.
|
|
</para>
|
|
</note>
|
|
</section>
|
|
|
|
|
|
<section id="mbstring.overload">
|
|
<title>
|
|
Exploitation des chaînes multi-octets en PHP
|
|
</title>
|
|
<para>
|
|
Comme presque tout PHP est écrit pour des langues qui sont
|
|
simple octets, il y a des difficultés à gérer le japonais. Toutes
|
|
les fonctions PHP de gestion des chaînes de caractères, comme
|
|
par exemple <function>substr</function> ne supportent par
|
|
les chaînes multi octets.
|
|
</para>
|
|
<para>
|
|
L'extension Multibyte (multi-octets, alias mbstring) dispose de fonctions
|
|
de chaînes, qui supportent le multi-octet, comme par exemple
|
|
<function>mb_substr</function>, qui est un remplaçant de <function>substr</function>.
|
|
</para>
|
|
<para>
|
|
mbstring supporte aussi le remplacement de fonction, pour
|
|
permettre le support des chaînes multi-octets sans modifier les
|
|
scripts PHP. En utilisant ce système de remplacement de fonctions,
|
|
certains fonctions PHP seront remplacées par leur équivalent
|
|
de mbstring. Par exemple <function>mb_substr</function> remplacera
|
|
<function>substr</function>. Ce système de remplacement transparent,
|
|
permet un portage simple et efficace des applications.
|
|
</para>
|
|
<para>
|
|
<literal>mbstring.func_overload</literal>, dans le &php.ini;,
|
|
doit être configuré avec une valeur positive :
|
|
1 remplace la fonction d'envoi de mail; 2 active les
|
|
fonction de chaînes; 4 active les fonctions d'expression régulières.
|
|
Par exemple, avec la valeur 7, toutes les fonctions possibles sont
|
|
remplacées. Voici la liste complète des fonctions remplacées, avec
|
|
leur fonction de remplacement.
|
|
<table>
|
|
<title>Fonctions de remplacement</title>
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry>Valeur de mbstring.func_overload</entry>
|
|
<entry>Fonction originale</entry>
|
|
<entry>Fonction de remplacement</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>1</entry>
|
|
<entry><function>mail</function></entry>
|
|
<entry><function>mb_send_mail</function></entry>
|
|
</row>
|
|
<row>
|
|
<entry>2</entry>
|
|
<entry><function>strlen</function></entry>
|
|
<entry><function>mb_strlen</function></entry>
|
|
</row>
|
|
<row>
|
|
<entry>2</entry>
|
|
<entry><function>strpos</function></entry>
|
|
<entry><function>mb_strpos</function></entry>
|
|
</row>
|
|
<row>
|
|
<entry>2</entry>
|
|
<entry><function>strrpos</function></entry>
|
|
<entry><function>mb_strrpos</function></entry>
|
|
</row>
|
|
<row>
|
|
<entry>2</entry>
|
|
<entry><function>substr</function></entry>
|
|
<entry><function>mb_substr</function></entry>
|
|
</row>
|
|
<row>
|
|
<entry>4</entry>
|
|
<entry><function>ereg</function></entry>
|
|
<entry><function>mb_ereg</function></entry>
|
|
</row>
|
|
<row>
|
|
<entry>4</entry>
|
|
<entry><function>eregi</function></entry>
|
|
<entry><function>mb_eregi</function></entry>
|
|
</row>
|
|
<row>
|
|
<entry>4</entry>
|
|
<entry><function>ereg_replace</function></entry>
|
|
<entry><function>mb_ereg_replace</function></entry>
|
|
</row>
|
|
<row>
|
|
<entry>4</entry>
|
|
<entry><function>eregi_replace</function></entry>
|
|
<entry><function>mb_eregi_replace</function></entry>
|
|
</row>
|
|
<row>
|
|
<entry>4</entry>
|
|
<entry><function>split</function></entry>
|
|
<entry><function>mb_split</function></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</para>
|
|
</section>
|
|
|
|
|
|
<section id="mbstring.ja-basic">
|
|
<title>Cas des caractères japonais</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
La taille nécessaire à un caractère peut aller jusqu'à 4 octets.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
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.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Certains encodage de caractères définissent des séquences de
|
|
début/fin pour les sections multi-octets.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
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).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Le courrier électronique utilise généralement ISO-2022-JP.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Les sites web en "i-mode" utilisent Shift_JIS.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</section>
|
|
<section id="mbstring.ref">
|
|
<title>Références</title>
|
|
<para>
|
|
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 :
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
Unicode/UTF/UCS/etc
|
|
</para>
|
|
<para>
|
|
<ulink url="&url.unicode;">&url.unicode;</ulink>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Japonais/coréen/Chinois
|
|
</para>
|
|
<para>
|
|
<literal>
|
|
ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/cjk.inf
|
|
</literal>
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</section>
|
|
</partintro>
|
|
|
|
&reference.mbstring.functions;
|
|
|
|
</reference>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
-->
|