Files
doc-fr/reference/mbstring/reference.xml
Yannick Torres 12138eaec5 typo
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@190192 c90b9560-bf6c-de11-be94-00142212c4b1
2005-07-07 21:53:39 +00:00

582 lines
21 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.20 $ -->
<!-- EN-Revision: 1.21 Maintainer: yannick Status: ready -->
<!-- Reviewed: yes -->
<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>
Même si la plupart des langues peuvent être représentées grâce
à un jeu de 128 caractères, il y a d'autres langues qui requièrent
des jeux de caractères bien plus grands. Des méthodes de caractères
multi-octets ont été développées pour résoudre ce type de problème.
</para>
<para>
Lorsque vous manipulez des chaînes de caractères multi-octets,
pour couper, rechercher ou nettoyer une chaîne, vous devez utiliser deux
octets consécutifs, qui représentent un seul caractère. Si vous n'y prenez
pas garde, vous allez obtenir une chaîne corrompue et invalide, avec
une représentation totalement incompréhensible.
</para>
<para>
<literal>mbstring</literal> fournit les fonctions spécifiques de manipulations
des chaînes multi-octets pour &php;, qui ne supporte que les jeux
mono-octets. De plus, <literal>mbstring</literal> gère la traduction
entre les jeux de caractères disponibles.
</para>
<para>
<literal>mbstring</literal> est aussi connu pour gérer l'Unicode, comme
UTF-8 et UCS-2 ainsi que de nombreux autres jeux mono-octets, même si
<literal>mbstring</literal> a été conçu à la base pour les pages
web japonaises.
</para>
<section id="mbstring.php4.req">
<title>Pré-requis de l'encodage en &php;</title>
<para>
Les jeux de caractères suivants sont bien supportés par &php;.
<itemizedlist>
<listitem>
<para>
Jeux de caractères mono-octets :
<itemizedlist>
<listitem>
<simpara>
qui sont compatibles avec la norme ASCII (compatible ISO646)
pour les caractères de l'intervalle <literal>00h</literal> à
<literal>7fh</literal>.
</simpara>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<para>
Jeux de caracètres multi-octets :
<itemizedlist>
<listitem>
<simpara>
qui sont compatibles avec la norme ASCII (compatible ISO646)
pour les caractères de l'intervalle <literal>00h</literal> à
<literal>7fh</literal>.
</simpara>
</listitem>
<listitem>
<simpara>
qui n'utilisent pas les séquences de type ISO2022.
</simpara>
</listitem>
<listitem>
<simpara>
qui n'utilisent pas de valeur dans l'intervalle <literal>00h</literal> à
<literal>7fh</literal> dans les séquences composées, qui
représentent un caractère unique.
</simpara>
</listitem>
</itemizedlist>
</para>
</listitem>
</itemizedlist>
</para>
<para>
Les jeux de caractères suivants risquent de ne pas fonctionner en &php;.
<example>
<title>Jeux de caractères qui risquent de ne pas fonctionner en &php;</title>
<programlisting>
<![CDATA[
JIS, SJIS, ISO-2022-JP, BIG-5
]]>
</programlisting>
</example>
</para>
<para>
Même si aucun script &php; écrit avec ces jeux de caractères ne fonctionne,
notamment si des chaînes encodées sont utilisées comme identifiants,
ou valeurs littérales dans le script, vous pouvez éviter d'utiliser ces
jeux en activant le filtre transparent <literal>mbstring</literal> pour les
données d'entrées HTTP.
</para>
<note>
<para>
Il est déconseillé d'utiliser les jeux SJIS, BIG5, CP936, CP949 et
GB18030 pour l'encodage interne, à moins que vous ne soyez très familiers
avec l'analyseur, le scanneur et le jeu de caractère lui-même.
</para>
</note>
<note>
<para>
Si vous avez une base de données connectée à &php;, il est recommandé
d'utiliser le même jeu de caractères dans la base et comme
<literal>jeu interne</literal> pour améliorer le confort d'utilisation
et les performances.
</para>
<para>
Si vous utilisez PostgreSQL, le jeu de caractères utilisé dans la base
de données et celui de &php; peuvent différer car cette base supporte
la traduction automatique de jeu de caractères.
</para>
</note>
</section>
</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 automatique des entrées/sorties HTTP peut
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>
<note>
<para>
Depuis la version 4.3.2 de &php;, il y a une limitation dans
l'utilisation des fonctionnalités <literal>mbstring</literal> :
l'encodage ne sera pas effectué dans les données transmises en méthode
POST si l'attribut <literal>enctype</literal> de la balise
<literal>form</literal> vaut <literal>multipart/form-data</literal>.
Donc, vous devrez convertir les données entrantes vous-même dans ce cas,
si nécessaire.
</para>
<para>
Depuis la version 4.3.3 de &php;, si l'attribut
<literal>enctype</literal> de la balise <literal>form</literal> vaut
<literal>multipart/form-data</literal> et que la directive du
&php.ini; est positionnée à On, les variables et les noms de fichiers
téléchargés en méthode POST seront convertis avec l'encodage interne.
Sinon, la conversion ne sera pas faite.
</para>
</note>
<para>
<itemizedlist>
<listitem>
<simpara>
Entrée HTTP
</simpara>
<para>
Il n'y a pas de moyens 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 toutes 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.supported-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>
<itemizedlist>
<listitem><simpara>UCS-4</simpara></listitem>
<listitem><simpara>UCS-4BE</simpara></listitem>
<listitem><simpara>UCS-4LE</simpara></listitem>
<listitem><simpara>UCS-2</simpara></listitem>
<listitem><simpara>UCS-2BE</simpara></listitem>
<listitem><simpara>UCS-2LE</simpara></listitem>
<listitem><simpara>UTF-32</simpara></listitem>
<listitem><simpara>UTF-32BE</simpara></listitem>
<listitem><simpara>UTF-32LE</simpara></listitem>
<listitem><simpara>UTF-16</simpara></listitem>
<listitem><simpara>UTF-16BE</simpara></listitem>
<listitem><simpara>UTF-16LE</simpara></listitem>
<listitem><simpara>UTF-7</simpara></listitem>
<listitem><simpara>UTF7-IMAP</simpara></listitem>
<listitem><simpara>UTF-8</simpara></listitem>
<listitem><simpara>ASCII</simpara></listitem>
<listitem><simpara>EUC-JP</simpara></listitem>
<listitem><simpara>SJIS</simpara></listitem>
<listitem><simpara>eucJP-win</simpara></listitem>
<listitem><simpara>SJIS-win</simpara></listitem>
<listitem><simpara>ISO-2022-JP</simpara></listitem>
<listitem><simpara>JIS</simpara></listitem>
<listitem><simpara>ISO-8859-1</simpara></listitem>
<listitem><simpara>ISO-8859-2</simpara></listitem>
<listitem><simpara>ISO-8859-3</simpara></listitem>
<listitem><simpara>ISO-8859-4</simpara></listitem>
<listitem><simpara>ISO-8859-5</simpara></listitem>
<listitem><simpara>ISO-8859-6</simpara></listitem>
<listitem><simpara>ISO-8859-7</simpara></listitem>
<listitem><simpara>ISO-8859-8</simpara></listitem>
<listitem><simpara>ISO-8859-9</simpara></listitem>
<listitem><simpara>ISO-8859-10</simpara></listitem>
<listitem><simpara>ISO-8859-13</simpara></listitem>
<listitem><simpara>ISO-8859-14</simpara></listitem>
<listitem><simpara>ISO-8859-15</simpara></listitem>
<listitem><simpara>byte2be</simpara></listitem>
<listitem><simpara>byte2le</simpara></listitem>
<listitem><simpara>byte4be</simpara></listitem>
<listitem><simpara>byte4le</simpara></listitem>
<listitem><simpara>BASE64</simpara></listitem>
<listitem><simpara>HTML-ENTITIES</simpara></listitem>
<listitem><simpara>7bit</simpara></listitem>
<listitem><simpara>8bit</simpara></listitem>
<listitem><simpara>EUC-CN</simpara></listitem>
<listitem><simpara>CP936</simpara></listitem>
<listitem><simpara>HZ</simpara></listitem>
<listitem><simpara>EUC-TW</simpara></listitem>
<listitem><simpara>CP950</simpara></listitem>
<listitem><simpara>BIG-5</simpara></listitem>
<listitem><simpara>EUC-KR</simpara></listitem>
<listitem><simpara>UHC (CP949)</simpara></listitem>
<listitem><simpara>ISO-2022-KR</simpara></listitem>
<listitem><simpara>Windows-1251 (CP1251)</simpara></listitem>
<listitem><simpara>Windows-1252 (CP1252)</simpara></listitem>
<listitem><simpara>CP866 (IBM866)</simpara></listitem>
<listitem><simpara>KOI8-R</simpara></listitem>
</itemizedlist>
<para>
Les entrées du fichier &php.ini;, qui acceptent des
noms de jeux de caractè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ères, acceptent aussi la valeur
&quot;<literal>auto</literal>&quot;.
</para>
<para>
Si &quot;<literal>pass</literal>&quot; est utilisée, aucune conversion
n'est effectuée.
</para>
<para>
Si &quot;<literal>auto</literal>&quot; est défini, la liste sera étendue à la liste des encodages
définis par <link linkend="mbstring.configuration">NLS</link>.
Par exemple, si <literal>NLS</literal> vaut <literal>Japanese</literal>, les valeurs seront
&quot;<literal>ASCII,JIS,UTF-8,EUC-JP,SJIS</literal>&quot;.
</para>
<para>
Voir aussi <function>mb_detect_order</function>.
</para>
</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
<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
<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 rationnelles.
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>2</entry>
<entry><function>strtolower</function></entry>
<entry><function>mb_strtolower</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>strtoupper</function></entry>
<entry><function>mb_strtoupper</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>substr_count</function></entry>
<entry><function>mb_substr_count</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>
<note>
<para>
Il n'est pas recommandé d'utiliser les options des fonctions d'overloading
dans un contexte de <literal>per-directory</literal>, car il n'est pas
confirmé encore qu'elles sont suffisamment stables dans un environnement
de production et peuvent conduire à un résultat incohérent.
</para>
</note>
</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és. 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 encodages de caractères définissent des séquences de
début/fin pour les sections multi-octets
(<literal>00h</literal> to <literal>7fh</literal>).
</simpara>
</listitem>
<listitem>
<simpara>
ISO-2022-JP doit être utilisé pour les protocoles SMTP/NNTP, et les en-têtes ainsi
que les entitiés devraient être réencodés en accord avec la RFC correspondante.
Bien que cela ne soit pas requis, ca reste une bonne idée car beaucoup de
user-agent (agents utilisateurs) populaires ne peuvent pas reconnaître d'autre
méthode d'encodage.
</simpara>
</listitem>
<listitem>
<simpara>
Les pages Web créées pour les téléphones portables comme
<ulink url="&url.imode;">i-mode</ulink>,
<ulink url="&url.vlife;">Vodafone live!</ulink>, ou <ulink url="&url.ezweb;">EZweb</ulink>
sont supposées utiliser l'encodage Shift_JIS.
</simpara>
</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>
<ulink url="&url.oreilly.cjk-inf;">&url.oreilly.cjk-inf;</ulink>
</para>
</listitem>
</itemizedlist>
</para>
</section>
&reference.mbstring.encodings;
</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:
-->