1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
<!-- English Revision: 1852223 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<modulesynopsis metafile="mod_xml2enc.xml.meta">
<name>mod_xml2enc</name>
<description>Support avancé de l'internationalisation et des jeux de
caractères pour les modules de filtrage basés sur libxml2</description>
<status>Base</status>
<sourcefile>mod_xml2enc.c</sourcefile>
<identifier>xml2enc_module</identifier>
<compatibility>Disponible depuis la version 2.4 du serveur HTTP Apache.
Disponible en tant que module tiers dans les versions 2.2.x</compatibility>
<summary>
<p>Ce module fournit un support avancé de l'internationalisation
pour les modules de filtrage supportant les balises (markup-aware)
comme <module>mod_proxy_html</module>. Il est capable de détecter
automatiquement l'encodage des données en entrée et de s'assurer
qu'elle sont traitées correctement par l'interpréteur <a
href="http://xmlsoft.org/">libxml2</a>, y compris la conversion en
Unicode (UTF-8) si nécessaire. Il peut aussi convertir les données
dans l'encodage de votre choix après le traitement des balises, et
s'assurera que le <var>jeu de caractères</var> approprié sera défini
dans l'en-tête HTTP <var>Content-Type</var>.</p>
</summary>
<section id="usage"><title>Utilisation</title>
<p>Il existe deux scénarios d'utilisation : le cas des modules
programmés pour travailler avec mod_xml2enc ; et les autres :</p>
<dl>
<dt>Modules de filtrages programmés pour mod_xml2enc</dt><dd>
<p>Les modules comme <module>mod_proxy_html</module> versions 3.1 et
supérieures utilisent la fonction optionnelle
<code>xml2enc_charset</code> pour déterminer la valeur de l'argument
"jeu de caractères" à transmettre à l'interpréteur libxml2, et
disposent de la fonction optionnelle <code>xml2enc_filter</code>
pour effectuer un encodage ultérieur éventuel. L'utilisation de
mod_xml2enc avec un module préprogrammé à cet effet ne nécessite
aucune configuration : ce dernier configurera mod_xml2enc pour vous
(sachant que vous pouvez tout de même le personnaliser via les
directives de configuration ci-dessous).</p>
</dd>
<dt>Modules de filtrages non programmés pour mod_xml2enc</dt><dd>
<p>Pour utiliser mod_xml2enc avec un module basé sur libxml2 qui n'a
pas été explicitement programmé pour mod_xml2enc, vous devrez
configurer la chaîne de filtrage vous-même. Ainsi, pour utiliser
mod_xml2enc avec un filtre <strong>foo</strong> fourni par un module
<strong>mod_foo</strong> et pour
améliorer le support i18n de ce dernier avec HTML et XML, vous
pouvez utiliser les directives suivantes :</p>
<pre><code>
FilterProvider iconv xml2enc Content-Type $text/html
FilterProvider iconv xml2enc Content-Type $xml
FilterProvider markup foo Content-Type $text/html
FilterProvider markup foo Content-Type $xml
FilterChain iconv markup
</code></pre>
<p><strong>mod_foo</strong> supportera alors tout jeu de caractère supporté soit par
libxml2, soit par apr_xlate/iconv, soit par les deux.</p>
</dd></dl>
</section>
<section id="api"><title>API de programmation</title>
<p>Les programmeurs de modules de filtrage basés sur libxml2 sont
encouragés à les préprogrammer pour mod_xml2enc, afin de fournir un
support i18n solide aux utilisateurs sans avoir à réinventer la
roue. L'API de programmation est décrite dans
<var>mod_xml2enc.h</var>, et <module>mod_proxy_html</module> est un
exemple de son utilisation.</p>
</section>
<section id="sniffing"><title>Détection et encodage</title>
<p>A la différence de <module>mod_charset_lite</module>, mod_xml2enc
est conçu pour travailler avec des données dont l'encodage ne peut
pas être connu, et donc configuré, à l'avance. Il utilise donc les
techniques de 'reniflage' suivantes pour détecter le type d'encodage
des données HTTP :</p>
<ol>
<li>Si l'en-tête HTTP <var>Content-Type</var> contient un
paramètre <var>charset</var>, c'est ce dernier qui sera utilisé.</li>
<li>Si les données commancent par une balise XML concernant
l'ordre des octets (BOM) ou par une déclaration d'encodage XML,
c'est celle-ci qui sera utilisée.</li>
<li>Si un type d'encodage est déclaré dans un élément HTML
<code><META></code>, c'est ce dernier qui sera utilisé.</li>
<li>Si aucun des éléments précédents n'est trouvé, c'est la
valeur par défaut définie par la directive
<directive>xml2EncDefault</directive> qui sera utilisée.</li>
</ol>
<p>Les conditions sont testées dans cet ordre . Dès qu'une règle
s'applique, elle est utilisée et la détection est terminée.</p>
</section>
<section id="output"><title>Codage en sortie</title>
<p><a href="http://xmlsoft.org/">libxml2</a> utilise toujours UTF-8
(Unicode) en interne, et les modules de filtrage basés sur libxml2
utiliseront cet encodage en sortie par défaut. mod_xml2enc peut modifier
l'encodage en sortie via l'API, mais il n'y a actuellement aucun moyen de le
configurer directement.</p>
<p>La modification de l'encodage en sortie ne devrait (du moins en théorie)
jamais être nécessaire, et est même déconseillée à cause de la charge de
traitement supplémentaire imposée au serveur par une conversion non
nécessaire.</p>
</section>
<section id="alias"><title>Codages non supportés</title>
<p>Si vous travaillez avec des encodages non supportés par aucune des
méthodes de conversion disponibles sur votre plateforme, vous pouvez
tout de même leur associer un alias vers un code supporté via la
directive <directive>xml2EncAlias</directive>.</p>
</section>
<directivesynopsis>
<name>xml2EncDefault</name>
<description>Définit un encodage par défaut à utiliser lorsqu'aucune
information ne peut être <a href="#sniffing">automatiquement détectée</a></description>
<syntax>xml2EncDefault <var>nom</var></syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>All</override>
<usage>
<p>Si vous traitez des données dont l'encodage est connu, mais ne
contenant aucune information à propos de ce dernier, vous pouvez
définir une valeur par défaut afin d'aider mod_xml2enc à traiter
correctement les données. Par exemple, pour définir la valeur par
défaut Latin1 (<var>iso-8859-1</var>) specifiée dans HTTP/1.0,
utilisez :</p>
<highlight language="config">
xml2EncDefault iso-8859-1
</highlight>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>xml2EncAlias</name>
<description>Définit des alias pour les valeurs d'encodage</description>
<syntax>xml2EncAlias <var>jeu-de-caractères alias [alias ...]</var></syntax>
<contextlist><context>server config</context></contextlist>
<usage>
<p>Cette directive de niveau serveur permet de définir un ou
plusieurs alias pour un encodage. Elle permet au support d'encodage de
libxml2 de traiter en interne des encodages non reconnus par libxml2
en utilisant la table de conversion pour un encodage reconnu. Elle
permet d'atteindre deux objectifs : supporter des jeux (ou noms) de
caractères non reconnus par libxml2 ou iconv, et éviter une
conversion pour un encodage lorsque cela n'est pas nécessaire.</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>xml2StartParse</name>
<description>Indique à l'interpréteur à partir de quelle balise il doit
commencer son traitement.</description>
<syntax>xml2StartParse <var>élément [élément ...]</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>All</override>
<usage>
<p>Cette directive permet de spécifier à partir de quelle balise,
parmi les éléments spécifiés, l'interpréteur de balise doit
commencer son traitement. Ccei permet de contourner le problème des
serveurs d'arrière-plan qui insèrent des éléments non conformes en
début de données, ce qui a pour effet de perturber l'interpréteur (<a
href="http://bahumbug.wordpress.com/2006/10/12/mod_proxy_html-revisited/"
>voir un exemple ici</a>).</p>
<p>Elle ne doit être utilisée ni pour les documents XML, ni pour les
documents HTML correctement formatés.</p>
</usage>
</directivesynopsis>
</modulesynopsis>
|