Files
doc-fr/reference/mbstring/reference.xml
Yannick Torres 49a173ccc1 sync with EN
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@230039 c90b9560-bf6c-de11-be94-00142212c4b1
2007-02-17 08:16:44 +00:00

571 lines
20 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.24 $ -->
<!-- EN-Revision: 1.25 Maintainer: yannick Status: ready -->
<!-- Purpose: international -->
<!-- Membership: bundled -->
<!-- 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
de chaînes qui vous permet de travailler avec les encodages multi-octets en &php;.
En plus de cela, <literal>mbstring</literal> gère la traduction
entre les jeux de caractères disponibles. <literal>mbstring</literal> est
également connu pour gérer l'Unicode, comme UTF-8 et UCS-2 ainsi que de
nombreux autres jeux mono-octets.
</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 caractères 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 vous connectez à une base de données avec &php;, il est recommandé
d'utiliser le même jeu de caractères pour la base de données et pour le
<literal>jeu interne</literal> pour améliorer le confort d'utilisation
mais aussi 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>
Toutes les entrées du &php.ini; qui acceptent un nom d'encodage
peuvent également utiliser 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, peuvent également utiliser 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>
Vous pourriez trouver difficile de faire fonctionner une application &php;
existante dans un environnement multi-octets. Ceci est dû au fait
que la plupart des applications &php; sont écrites avec des fonctions
de chaînes de caractères standards comme la fonction
<function>substr</function>, qui est connue pour ne pas gérer
proprement les chaînes multi-octets.
</para>
<para>
Mbstring supporte aussi la surcharge de fonctions, pour
permettre le support des chaînes multi-octets sans modifier les
scripts &php;. En utilisant ce système de surcharge de fonctions,
certaines 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>
Pour utiliser la surcharge de fonctions, définissez
<literal>mbstring.func_overload</literal>, dans le &php.ini;,
à une valeur positive qui représente une combinaison de masques d'octets
spécifiant les catégories de fonctions à surcharger. Il doit être définit à
1 pour surcharger la fonction <function>mail</function>, 2 pour les
fonction de chaînes, 4 pour les fonctions d'expression rationnelles.
Par exemple, avec la valeur 7, toutes les fonctions précédentes seront
surchargées. Voici la liste complète des fonctions surchargé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>
Les caractères japonais ne peuvent être représentés qu'avec des encodages
multi-octets et les standards d'encodage multiple sont utilisés suivant
la plateforme et le texte de référence. Pour facilité les choses, ces standards
d'encodages diffèrent légèrement les uns des autres.
Pour développer des applications Web en environnement
japonais, le développeur devra garder à l'esprit ces complexités afin de s'assurer
que l'encodage de caractères correct est utilisé.
</para>
<para>
<itemizedlist>
<listitem>
<simpara>
La taille nécessaire à un caractère peut aller jusqu'à 4 octets.
</simpara>
</listitem>
<listitem>
<simpara>
Un caractère japonais multi-octets occupe généralement deux octets,
à comparer avec les caractères simple-octet traditionnellement
utilisés. Ces caractères sont appelés &quot;zen-kaku&quot;, ce qui signifie
&quot;grande largeur&quot;. Les plus petits sont appelés &quot;han-kaku&quot;,
ce qui signifie &quot;demi-largeur&quot;.
</simpara>
</listitem>
<listitem>
<simpara>
Certains encodages de caractères utilisent des séquences &quot;shift&quot; (escape)
définies dans la référence ISO-2022 pour basculer vers la carte d'encodage du code
spécifique (<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 entités devraient être réencodés en accord avec la RFC correspondante.
Bien que cela ne soit pas requis, ça 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 et ne
peuvent être traités totalement dans cette documentation. Reportez-vous aux
URL suivantes pour d'autres ressources 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:
-->