Files
doc-fr/reference/mbstring/reference.xml
T
Mehdi Achour 080f2a9f69 s/inactiver/désactiver/
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@140362 c90b9560-bf6c-de11-be94-00142212c4b1
2003-09-15 11:57:29 +00:00

503 lines
18 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.5 $ -->
<reference id="ref.mbstring">
<title>Cha&icirc;nes de caract&egrave;res multi-octets</title>
<titleabbrev>Cha&icirc;nes de caract&egrave;res multi-octets</titleabbrev>
<partintro>
<section id="mbstring.intro">
&reftitle.intro;
<para>
De nombreuses langues dont les signes ne peuvent pas &ecirc;tre exprim&eacute;s
sur un seul octet. Des codes multi-octets sont utilis&eacute;s pour
pallier &agrave; cette insuffisance. <literal>mbstring</literal>
est d&eacute;velopp&eacute; pour supporter les caract&egrave;res japonais. Cependant,
de nombreuses fonctions <literal>mbstring</literal> peuvent supporter
d'autres jeux de caract&egrave;res.
</para>
<para>
Les jeux de caract&egrave;res multi-octets repr&eacute;sentent les caract&egrave;res
sur plusieurs octets cons&eacute;cutifs (d'o&ugrave; leur nom). Certains
syst&egrave;mes d'encodages ont des caract&egrave;res d'&eacute;chappement
d&eacute;di&eacute;s, pour d&eacute;marrer/finir une s&eacute;quence de
caract&egrave;res multi-octets. De ce fait, certains caract&egrave;res
peuvent &ecirc;tre d&eacute;truit lorsqu'une cha&icirc;ne est
coup&eacute;e en plusieurs morceaux, ou bien conduire &agrave; des r&eacute;sultats
erronn&eacute;s lorsque le nombre de caract&egrave;re est compt&eacute;. Il faut utiliser
des fonctions qui supportent ces encodages. Les fonctions
<literal>mbstring</literal> supportent les jeux de caract&egrave;res
multi-octets, ainsi que les conversions.
</para>
<para>
Etant donn&eacute; que PHP supporte essentiellement le jeu de
caract&egrave;res ISO-8859-1, certains jeux de caract&egrave;res
ne fonctionnent pas bien avec PHP. Par cons&eacute;quent,
il est important de donner une valeur &agrave; l'option de configuration
<literal>mbstring.internal_encoding</literal> qui permettent &agrave; PHP de
travailler correctement.
</para>
<para>
Pr&eacute;-requis PHP 4
</para>
<para>
<itemizedlist>
<listitem>
<simpara>
Encodage par octet
</simpara>
</listitem>
<listitem>
<simpara>
Les caract&egrave;res d'un octet dans l'intervalle <literal>00h-7fh</literal>
doivent &ecirc;tre compatibles avec le code <literal>ASCII</literal>
</simpara>
</listitem>
<listitem>
<simpara>
Jeux de caract&egrave;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&egrave;res qui fonctionnent avec PHP</title>
<programlisting>
<![CDATA[
Jeus de caract&egrave;res qui fonctionnent avec PHP :
ISO-8859-*, EUC-JP, UTF-8
Jeu de caract&egrave;res qui NE fonctionnent PAS avec PHP :
JIS, SJIS
]]>
</programlisting>
</example>
</para>
<para>
Les jeux de caract&egrave;res qui ne fonctionnent pas comme encodage interne
&agrave; PHP, peuvent toutefois &ecirc;tre utilis&eacute; avec les fonctions de conversion
de <literal>mbstring</literal>.
</para>
<note>
<para>
SJIS ne doit pas &ecirc;tre utilis&eacute; comme encodage interne, &agrave;
moins que vous ne soyez familier de l'analyseur/compilateur, et des
probl&egrave;mes li&eacute;s aux jeux de caract&egrave;res.
</para>
</note>
<note>
<para>
SI vous utilisez une base de donn&eacute;es avec PHP, il est recommand&eacute;
que vous utilisiez le m&ecirc;me jeu de caract&egrave;re pour la base de donn&eacute;es
et le jeu de caract&egrave;re interne de PHP, pour am&eacute;liorer les performances.
</para>
<para>
Si vous utilisez PostgreSQL, il supporte des jeux de caract&egrave;res qui
peuvent &ecirc;tre diff&eacute;rents de ceux du client. Reportez vous au manuel
de PostgreSQL pour plus de d&eacute;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&eacute;es/Sorties HTTP</title>
<para>
La conversion automatiques des entr&eacute;es/sorties HTTP peuvent
aussi convertir des donn&eacute;es binaires. Les utilisateurs
doivent contr&ocirc;ler les conversions, si des donn&eacute;es binaires doivent
&ecirc;tre utilis&eacute;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&eacute;es du POST. Dans ce
cas, les cha&icirc;nes de caract&egrave;res doivent &ecirc;tre convertis manuellement.
</para>
<para>
<itemizedlist>
<listitem>
<simpara>
Entr&eacute;e HTTP
</simpara>
<para>
Il n'y a pas de moyen de contr&ocirc;ler la conversion des caract&egrave;res
HTTP en entr&eacute;e, depuis un script PHP. Pour d&eacute;sactiver cette conversion,
il faut le faire d&egrave;s le fichier &php.ini;.
<example>
<title>
D&eacute;sactive la conversion HTTP dans le php.ini
</title>
<programlisting role="php">
<![CDATA[
;; D&eacute;sactive la conversion HTTP
mbstring.http_input = pass
;; D&eacute;sactive la conversion HTTP (PHP 4.3.0 ou plus r&eacute;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 &agrave; 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&egrave;me de conversion de
<literal>mbstring</literal> diff&egrave;re de celui de PHP3-i18n.
Le jeu de caract&egrave;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&egrave;re uniquement pour cette page
// Choisi le jeu de caract&egrave;res SJIS
mb_http_output('SJIS');
// Commence la bufferisation et sp&eacute;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&egrave;res support&eacute;s</title>
<simpara>
Actuellement, les jeux de caract&egrave;res suivants sont
support&eacute;s par <literal>mbstring</literal>. L'encodage
de caract&egrave;re peut &ecirc;tre sp&eacute;cifi&eacute;
par les param&egrave;tres <literal>encoding</literal> dans les fonctions
<literal>mbstring</literal>.
</simpara>
<para>
Les jeux de caract&egrave;res suivants sont support&eacute;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&egrave;rs suivants sont ajout&eacute;s, mais restent
exp&eacute;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&eacute;es du fichiers &php.ini;, qui acceptent des
noms de jeux de caract&egrave;res, acceptent aussi les valeurs
&quot;<literal>auto</literal>&quot; et
&quot;<literal>pass</literal>&quot;.
Les fonctions <literal>mbstring</literal>,qui acceptent des
noms de jeux de caract&egrave;res, acceptent aussi la valeur
&quot;<literal>auto</literal>&quot;/
</para>
<para>
Si &quot;<literal>pass</literal>&quot; est utilis&eacute;e, aucune conversion
n'est effectu&eacute;e.
</para>
<para>
Si &quot;<literal>auto</literal>&quot; est utilis&eacute;e, elle est remplac&eacute;e
par &quot;<literal>ASCII,JIS,UTF-8,EUC-JP,SJIS</literal>&quot;.
</para>
<para>
Voir aussi <function>mb_detect_order</function>.
</para>
<note>
<para>
Un jeu de caract&egrave;re support&eacute; n'est pas forc&eacute;ment un bon choix comme
jeu de caract&egrave;res interne.
</para>
</note>
</section>
<section id="mbstring.overload">
<title>
Exploitation des cha&icirc;nes multi-octets en PHP
</title>
<para>
Comme presque tout PHP est &eacute;crit pour des langues qui sont
simple octets, il y a des difficult&eacute;s &agrave; g&eacute;rer le japonais. Toutes
les fonctions PHP de gestion des cha&icirc;nes de caract&egrave;res, comme
par exemple <function>substr</function> ne supportent par
les cha&icirc;nes multi octets.
</para>
<para>
L'extension Multibyte (multi-octets, alias mbstring) dispose de fonctions
de cha&icirc;nes, qui supportent le multi-octet, comme par exemple
<function>mb_substr</function>, qui est un rempla&ccedil;ant de <function>substr</function>.
</para>
<para>
mbstring supporte aussi le remplacement de fonction, pour
permettre le support des cha&icirc;nes multi-octets sans modifier les
scripts PHP. En utilisant ce syst&egrave;me de remplacement de fonctions,
certains fonctions PHP seront remplac&eacute;es par leur &eacute;quivalent
de mbstring. Par exemple <function>mb_substr</function> remplacera
<function>substr</function>. Ce syst&egrave;me de remplacement transparent,
permet un portage simple et efficace des applications.
</para>
<para>
<literal>mbstring.func_overload</literal>, dans le &php.ini;,
doit &ecirc;tre configur&eacute; avec une valeur positive :
1 remplace la fonction d'envoi de mail; 2 active les
fonction de cha&icirc;nes; 4 active les fonctions d'expression r&eacute;guli&egrave;res.
Par exemple, avec la valeur 7, toutes les fonctions possibles sont
remplac&eacute;es. Voici la liste compl&egrave;te des fonctions remplac&eacute;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&egrave;res japonais</title>
<para>
La plupart des caract&egrave;res japonais demandent plus d'un octet
pour &ecirc;tre repr&eacute;sent&eacute;s. De plus, plusieurs jeux de caract&egrave;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&eacute;velopper des applications Web en environnement
japonais, il faut savoir que les encodages ci-dessus d&eacute;pendent de
l'application qu'on en fait : entr&eacute;e/sortie HTTP, bases de donn&eacute;es
ou courrier &eacute;lectronique.
</para>
<para>
<itemizedlist>
<listitem>
<simpara>
La taille n&eacute;cessaire &agrave; un caract&egrave;re peut aller jusqu'&agrave; 4 octets.
</simpara>
</listitem>
<listitem>
<simpara>
Un caract&egrave;re multi-octets occupe g&eacute;n&eacute;ralement deux octets,
&agrave; comparer avec les caract&egrave;res simple-octet traditionnellement
utilis&eacute;. Les caract&egrave;res les plus gros sont appel&eacute;s "zen-kaku"
(i.e. grande largeur) et les plus petits sont appel&eacute;s "han-kaku"
(i.e. demi-largeur). Les caract&egrave;res "zen-kaku" sont
g&eacute;n&eacute;ralement de taille constante.
</simpara>
</listitem>
<listitem>
<simpara>
Certains encodage de caract&egrave;res d&eacute;finissent des s&eacute;quences de
d&eacute;but/fin pour les sections multi-octets.
</simpara>
</listitem>
<listitem>
<simpara>
Les bases de donn&eacute;es allouent des tailles de stockages diff&eacute;rentes
de celles utilis&eacute;es par PHP, m&ecirc;me si le m&ecirc;me encodage
de caract&egrave;re est utilis&eacute; (par exemple, PostGreSQL).
</simpara>
</listitem>
<listitem>
<simpara>
Le courrier &eacute;lectronique utilise g&eacute;n&eacute;ralement ISO-2022-JP.
</simpara>
</listitem>
<listitem>
<para>
Les sites web en &quot;i-mode&quot; utilisent Shift_JIS.
</para>
</listitem>
</itemizedlist>
</para>
</section>
<section id="mbstring.ref">
<title>R&eacute;f&eacute;rences</title>
<para>
Les jeux de caract&egrave;res multi-octets et leurs techniques sont tr&egrave;s complexes.
Il n'est pas possible de couvrir tous les aspects en d&eacute;tails ici. Reportez-vous aux
URL suivantes, pour d'autres ressouces compl&eacute;mentaires :
<itemizedlist>
<listitem>
<para>
Unicode/UTF/UCS/etc
</para>
<para>
<ulink url="&url.unicode;">&url.unicode;</ulink>
</para>
</listitem>
<listitem>
<para>
Japonais/cor&eacute;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:
-->