<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mathieu Agopian &#187; technique</title>
	<atom:link href="http://mathieu.agopian.info/blog/category/technique/feed/" rel="self" type="application/rss+xml" />
	<link>http://mathieu.agopian.info/blog</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Tue, 31 Aug 2010 15:48:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>MySQL, mysqldump et PHP : convertir de latin1 vers utf8</title>
		<link>http://mathieu.agopian.info/blog/2010/03/mysql-mysqldump-et-php-convertir-de-latin1-vers-utf8/</link>
		<comments>http://mathieu.agopian.info/blog/2010/03/mysql-mysqldump-et-php-convertir-de-latin1-vers-utf8/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 06:38:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[système]]></category>
		<category><![CDATA[technique]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[iso-8859-1]]></category>
		<category><![CDATA[latin1]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://mathieu.agopian.info/blog/?p=262</guid>
		<description><![CDATA[Cet article à pour but de vous éviter, à vous lecteur, de vivre la perte de neurones (et le gain de cheveux blancs) que j&#8217;ai subit dernièrement, à investiguer des soucis de charset dans une base de donnée MySQL (et l&#8217;affichage sur une page web par le biais de PHP). Je tiens à préciser que [...]]]></description>
			<content:encoded><![CDATA[<p>Cet article à pour but de vous éviter, à vous lecteur, de vivre la perte de neurones (et le gain de cheveux blancs) que j&#8217;ai subit dernièrement, à investiguer des soucis de charset dans une base de donnée MySQL (et l&#8217;affichage sur une page web par le biais de PHP).</p>
<p>Je tiens à préciser que je ne suis pas un expert MySQL, et encore moins un expert en encoding, et certaines définitions ou mots utilisés dans cet article peuvent ne pas être utilisés à bon escient. Le fond et la méthode présentée ont par contre été vérifiés et testés!</p>
<h3>Introduction à l&#8217;encoding</h3>
<p>Je ne parlerais pas ici de ASCII ou Unicode (normes utilisées pour stocker les données), mais du jeu de caractères utilisé pour <em>encoder</em> ces données (et les afficher de manière lisible pour un être humain).  Pour commencer, quelques définitions:</p>
<ol>
<li><a title="Page Wikipedia sur l'encoding (en français)" href="http://fr.wikipedia.org/wiki/Charset" target="_self">encoding</a> =  character set = charset : jeu de caractères utilisé pour représenter des données</li>
<li><a title="Page Wikipedia sur l'UTF8 (en français)" href="http://fr.wikipedia.org/wiki/Utf8">utf8</a> = UTF-8 : un encoding qui associe un caractère à chaque &laquo;&nbsp;codepoint&nbsp;&raquo; <a title="Page wikipedia sur Unicode (en Français)" href="http://fr.wikipedia.org/wiki/Unicode" target="_self">Unic﻿ode</a> (particularité: tous les caractères hors <em>latin1</em> sont stockés sur deux octets)</li>
<li><a title="Page Wikipedia sur le Latin1 (en français)" href="http://fr.wikipedia.org/wiki/Latin1" target="_self">latin1</a> = latin-1 = ISO-8859-1 : un encoding qui associe un caractère à chaque octet de la table <a title="Page wikipédia sur ASCII (en français)" href="http://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange" target="_self">ASCII</a></li>
</ol>
<p>Pour résumer, chaque caractère peut être stocké sur le disque en Unicode (ou en ASCII, beaucoup plus limité). Il est ensuite <em>encodé</em> (traduit, représenté) avec un jeu de caractères pour être affichable et lisible par un être humain.</p>
<p>Historiquement, pour les pays occidentaux, l&#8217;encodage était fait en latin1 (caractères latins avec ses accentuations). De nos jours, de plus en plus d&#8217;applications se tournent vers Unicode et l&#8217;encodage en UTF-8 qui permet de représenter l&#8217;ensemble des caractères utilisés universellement (il n&#8217;est donc pas limité aux caractères latins, mais inclut par exemple les caractères cyrilliques, chinois&#8230;).</p>
<h4>Charset utilisé par les tables et les champs</h4>
<p>Pour consulter l&#8217;encodage utilisé par défaut pour une table ou un champ particulier :</p>
<pre class="brush:sql">mysql&gt; SHOW CREATE TABLE bar;
+-------+-------------------------------+
| Table | Create Table                  |
+-------+-------------------------------+
| bar   | CREATE TABLE `bar` (
  `id` int(11) default NULL,
  `firstname` char(20) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+-------------------------------+
1 row in set (0.00 sec)</pre>
<p><strong>ATTENTION : </strong>les charset définits au niveau de la base de donnée, de la table et du champ sont des &laquo;&nbsp;default charset&nbsp;&raquo;. Il est tout à fait possible d&#8217;avoir une table avec un champ dont le contenu est en <em>latin1</em>, puis changer le <em>DEFAULT CHARACTER SET</em> à <em>utf8</em> pour ce champ. Toutes les données existantes seront toujours en <em>latin1</em>, par contre toutes les nouvelles données <span style="text-decoration: underline;">entrées en </span><span style="text-decoration: underline;"><em>utf8</em></span> seront en <em>utf8</em>. On est alors confronté au pire des problèmes : des charsets différents au sein d&#8217;une table pour un même champ.</p>
<h4>Charset utilisé par le serveur, la database, les tables, les champs, le client, la connexion, les résultats&#8230;</h4>
<p>Les encodages utilisés par le client, la connexion, le serveur, et l&#8217;affichage des résultats sont consultable par la commande suivante:</p>
<pre class="brush:sql">mysql&gt; SHOW VARIABLES WHERE variable_name like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)</pre>
<p>Dans cet exemple, le client, la connexion, la database et les résultats sont tous en <em>utf8</em>. Il n&#8217;y a que le serveur lui-même qui est en <em>latin1</em> par défaut.  Pour configurer le client, la connexion et les résultats, on peut soit utiliser la commande</p>
<pre class="brush:sql">mysql&gt; SET NAMES utf8;</pre>
<p>Soit configurer les variables décrites dans le paragraphe suivant :</p>
<h4>Les variables de configuration</h4>
<p>Elles peuvent être définies au niveau du fichier <em>/etc/mysql/my.cnf</em> (peut être situé à un autre endroit selon la distribution):</p>
<pre class="brush:text">[mysqld]
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci # utilisé pour les comparaisons

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8</pre>
<h3>L&#8217;encoding du terminal: attention au piège!</h3>
<p>Quels que soit les charsets (par défaut) que vous avez configurés, il faut savoir que c&#8217;est le charset du terminal (si vous êtes en ligne de commande sur <em>mysql</em> par exemple) qui sera utilisé lors d&#8217;un <em>UPDATE</em> ou <em>INSERT</em> dans une table.</p>
<p>Ainsi, même si vous avez tout configuré (y compris le <em>SET NAMES)</em> pour être en <em>latin1</em>, lors d&#8217;une insertion dans une table, si votre terminal est en <em>utf8</em> la donnée sera stockée en <em>utf8</em>.</p>
<p>Reportez-vous à <a title="Tester le charset de son terminal" href="http://www.tuteurs.ens.fr/faq/utf8.html#test" target="_self">cette astuce</a> pour tester le charset (<em>latin1</em> ou <em>utf8</em>) de votre terminal. Il faut <strong><span style="text-decoration: underline;">ABSOLUMENT</span><span style="font-weight: normal;"> que votre client ai le même encoding que votre terminal pour éviter les <a title="Lien en anglais: comment utiliser encoding et collation correctement" href="http://forge.mysql.com/w/images/b/b6/How_to_Use_Charsets_and_Collations_Properly.pdf" target="_self">conflits</a> (à partir de la page 21).</span></strong></p>
<h3>Détecter le charset utilisé pour un champ</h3>
<p>Commençons par une astuce pour différencier une donnée stockée en <em>utf8</em> de <em>latin1 <span style="font-style: normal;">:</span></em></p>
<pre class="brush:sql">mysql&gt; select firstname, length(firstname) from bar;
+-----------+-------------------+
| firstname | length(firstname) |
+-----------+-------------------+
| dédé    |                 6 |
+-----------+-------------------+
1 row in set (0.00 sec)</pre>
<p>6 octets pour stocker 4 caractères ? C&#8217;est de l&#8217;<em>utf8 </em>! Les accents sont stockés sur deux octets. Si ça avait été du <em>latin1</em>, la longueur de la donnée aurait été de 4 octets.</p>
<h3><strong>Mais alors, je peux demander à MySQL de convertir mes données ?</strong></h3>
<p><strong></strong>Oui, mais pour savoir où aller, il faut savoir d&#8217;où on vient: avant de demander à MySQL de convertir une donnée, il faut connaitre son encodage actuel, et surtout dans quel encodage MySQL croit que ces données sont.</p>
<p>Il faut bien garder en tête que lorsqu&#8217;on parle du charset d&#8217;une table, d&#8217;un champ, d&#8217;une base de donnée&#8230; on parle du charset <span style="text-decoration: underline;">par défaut</span>, et donc du charset que le serveur va utiliser pour insérer/retourner des données. Cela n&#8217;a aucune incidence sur l&#8217;encodage utilisé auparavant pour les données.</p>
<ul>
<li>charset du serveur égal au charset du client : aucune conversion n&#8217;est faite</li>
<li>charset du serveur en <em>latin1</em>, charset du client en <em>utf8</em> : la donnée va être encodée en <em>utf8</em> (même si elle l&#8217;était déjà =&gt; problème de double encoding)</li>
<li>charset du serveur en <em>utf8</em>, charset du client en <em>latin1</em> : la donnée va être encodée en <em>latin1</em></li>
</ul>
<h3>Mes données sont stockées en <em>utf8</em> et MySQL ne le sait pas!</h3>
<p>Symptôme: quand on affiche le <em>length</em> d&#8217;une donnée avec des caractères accentués, ça donne un nombre d&#8217;octets plus grands que le nombre de caractères. La donnée est donc en <em>utf8</em>.  Par contre, le serveur, la db, la table, le champ&#8230; sont configurés pour être en <em>latin1</em>. Et quand on essaie de faire un <em>SET NAMES utf8</em>, la donnée s&#8217;affiche avec des &laquo;&nbsp;Ã©&nbsp;&raquo; : dans ce cas, c&#8217;est une donnée stockée en <em>utf8</em>, mais qui est interprétée comme du <em>latin1</em> par MySQL, qui va donc l&#8217;encoder une seconde fois en <em>utf8</em> (problème de double encoding).</p>
<h4>La solution :</h4>
<p>Le serveur pense que les données sont en <em>latin1</em> et on sait qu&#8217;elles sont en <em>utf8</em> (notre charset final souhaité). Il suffit de</p>
<ol>
<li>faire un dump de la base dans un fichier en <em>latin1</em> pour qu&#8217;il n&#8217;y ai aucune conversion (pas de double encoding)
<ul>
<pre class="brush:bash">$ mysqldump -u &lt;user&gt; -p&lt;pass&gt; --default-character-set=latin1 foo bar &gt; temp.sql</pre>
</ul>
</li>
<li>modifier ce fichier pour y faire disparaitre toute trace de &laquo;&nbsp;latin1&#8243;
<ul>
<pre class="brush:bash">$ cat temp.sql | sed 's/SET NAMES latin1/SET NAMES utf8/g' &gt; tmp
$ cat tmp | sed 's/CHARSET=latin1/CHARSET=utf8/g' &gt; temp.sql</pre>
</ul>
</li>
<li>configurer la table, la base de donnée et le serveur pour qu&#8217;ils soient en &laquo;&nbsp;default charset <em>utf8</em>&nbsp;&raquo; (cf le chapitre sur les variables de configuration)</li>
<li>réimporter les données dedans
<ul>
<pre class="brush:bash">$ mysql -u &lt;user&gt; -p&lt;pass&gt; foo &lt; temp.sql</pre>
</ul>
</li>
</ol>
<h3>Mes données sont stockées en <em>latin1</em> et MySQL le sait, mais je les veux en <em>utf8</em></h3>
<p>Vu que le serveur sait que ses données sont en <em>latin1</em>, il suffit de lui demander de nous les fournir en <em>utf8</em> :</p>
<ol>
<li>faire un dump de la base dans un fichier en <em>utf8</em> pour qu&#8217;il y ai une conversion automatique à partir de <em>latin1</em>
<ul>
<pre class="brush:bash">$ mysqldump -u &lt;user&gt; -p&lt;pass&gt; --default-character-set=utf8 foo bar &gt; temp.sql</pre>
</ul>
</li>
<li>modifier ce fichier pour y faire disparaitre toute trace de &laquo;&nbsp;latin1&#8243;
<ul>
<pre class="brush:bash">$ cat temp.sql | sed 's/SET NAMES latin1/SET NAMES utf8/g' &gt; tmp
$ cat tmp | sed 's/CHARSET=latin1/CHARSET=utf8/g' &gt; temp.sql</pre>
</ul>
</li>
<li>configurer la table, la base de donnée et le serveur pour qu&#8217;ils soient en &laquo;&nbsp;default charset utf8&#8243; (cf le chapitre sur les variables de configuration)</li>
<li>réimporter les données dedans
<ul>
<pre class="brush:bash">$ mysql -u &lt;user&gt; -p&lt;pass&gt; foo &lt; temp.sql</pre>
</ul>
</li>
</ol>
<h3>Et PHP dans tout ça? Avant ça marchait, maintenant j&#8217;ai des ﻿﻿� !</h3>
<p>Ce cher PHP (hint: passez à <a title="Page du framework web Django" href="http://www.djangoproject.com/" target="_self">Django</a>! c&#8217;est bien plus beau!) ne prends pas en compte les configurations mises au niveau du serveur (ou du fichier de configuration) pour son encoding!</p>
<p>Par défaut la commande <em>mysql_connect</em> va toujours utiliser le charset <em>latin1</em> : vous pouvez en avoir la preuve avec la commande <em>mysql_client_encoding</em>.</p>
<p>PHP va donc vous fournir des données interprétées en <em>latin1</em> alors qu&#8217;elles sont en <em>utf8</em>, d&#8217;où les caractères � non valides.</p>
<p>Il suffit alors d&#8217;utiliser la commande <em>mysql_set_charset(&#8216;utf8&#8242;, $connection)</em> sur la connexion ouverte avec <em>mysql_connect</em>.</p>
<p><span style="text-decoration: underline;">Faites bien attention</span> d&#8217;avoir définit <em>utf8</em> pour l&#8217;encoding de vos pages HTML soit par une balise <em>meta</em> dans votre entête de page, ou en ayant configuré votre serveur web pour servir les pages en <em>utf8</em>. Un moyen simple de vérifier ça est d&#8217;afficher les informations de la page.</p>
]]></content:encoded>
			<wfw:commentRss>http://mathieu.agopian.info/blog/2010/03/mysql-mysqldump-et-php-convertir-de-latin1-vers-utf8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obfuscation de l&#039;email alternative et accessible</title>
		<link>http://mathieu.agopian.info/blog/2009/09/obfuscation-de-lemail-alternative-et-accessible/</link>
		<comments>http://mathieu.agopian.info/blog/2009/09/obfuscation-de-lemail-alternative-et-accessible/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 11:51:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technique]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mathieu.agopian.info/blog/?p=155</guid>
		<description><![CDATA[English translation of this post also available. Le Problème Les quatre prérequis pour l&#8217;obfuscation d&#8217;une adresse mail sont les suivants: Ne pas pénaliser l&#8217;utilisateur: pouvoir cliquer sur le mail Ne pas pénaliser l&#8217;utilisateur: pouvoir copier/coller l&#8217;adresse Ne pas pénaliser l&#8217;utilisateur: l&#8217;addresse doit rester accessible (en mode texte, sans css et/ou sans js) Difficilement récupérables par [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://acamo.fr/blog">English translation</a> of this post also available.</p>
<h3>Le Problème</h3>
<p>Les quatre prérequis pour l&#8217;obfuscation d&#8217;une adresse mail sont les suivants:</p>
<ol>
<li>Ne pas pénaliser l&#8217;utilisateur: pouvoir cliquer sur le mail</li>
<li>Ne pas pénaliser l&#8217;utilisateur: pouvoir copier/coller l&#8217;adresse</li>
<li>Ne pas pénaliser l&#8217;utilisateur: l&#8217;addresse doit rester accessible (en mode texte, sans css et/ou sans js)</li>
<li>Difficilement récupérables par des spambots</li>
</ol>
<p>L&#8217;ordre n&#8217;est pas une coïncidence: le but de l&#8217;obfuscation est bien entendu d&#8217;empêcher les spambots de récuperer l&#8217;adresse email, <strong>mais celà ne doit en aucun cas pénaliser l&#8217;utilisateur du site</strong>.</p>
<p>Les différentes méthodes d&#8217;obfuscation d&#8217;adresse email qui tournent sur la toile, malheureusement, échouent en général au moins sur l&#8217;un des 4 points listés.</p>
<h3>La Solution</h3>
<p>Pour les utilisateurs de webkit avec le javascript désactivé, voir les <a href="#limitations">limitations</a>.</p>
<pre>&lt;a href="/contactform.html" id="emailaddress"&gt;
    prenom.nom&lt;img src="" alt="@" /&gt;example.com
&lt;/a&gt;
&lt;script&gt; type="text/javascript"&gt;
    mail = new Array("prenom.nom", "example.com").join("@");
    ea = document.getElementById("emailaddress");
    ea.href = "mailto:" + mail;
    ea.innerHTML = mail;
&lt;/script&gt;</pre>
<p>Et voici le résultat: <a id="emailaddress" href="/contactform.html">prenom.nom<img alt="@" />example.com</a><br />
<script type="text/javascript">// <![CDATA[
    mail = new Array("prenom.nom", "example.com").join("@");
    ea = document.getElementById("emailaddress");
    ea.href = "mailto:" + mail;
    ea.innerHTML = mail;
// ]]&gt;</script></p>
<h3>L&#8217;Explication</h3>
<p>Si javascript est activé, l&#8217;attribut <code>href</code> ainsi que le contenu du lien sont modifiés afin que l&#8217;obfuscation soit invisible. Rien de nouveau donc.</p>
<p>Si javascript est désactivé, en utilisant le contenu alternatif d&#8217;une image inexistante pour remplacer le &laquo;&nbsp;@&nbsp;&raquo;, on obtient plusieurs résultats intéressants:</p>
<ul>
<li>Les lecteurs d&#8217;écrans liront l&#8217;attribut <code>alt</code> pour l&#8217;image, l&#8217;email étant donc très facilement déchiffrable</li>
<li>L&#8217;attribut <code>alt</code> est affiché, rendant l&#8217;obfuscation invisible, même en mode texte ou sans css</li>
<li>L&#8217;adresse est copiable sans aucun soucis</li>
<li>L&#8217;email est toujours clickable, le lien menant sur un formulaire de contact</li>
</ul>
<p>Un gros avantage d&#8217;utiliser un attribut d&#8217;un tag html est qu&#8217;il contre les spambots qui ne récupèrement que le texte, et non les tags html, afin de ne pas être bloqués par les méthodes d&#8217;obfuscation basées sur l&#8217;insertion de tags invisibles ou de commentaires dans l&#8217;adresse.<br />
Ici, supprimer le tag <code>&lt;img&gt;</code> revient à perdre l&#8217;information capitale du &laquo;&nbsp;@&nbsp;&raquo;.</p>
<h3 id="limitations">Les limitations</h3>
<p>Il y a deux bugs non résolus dans Webkit à la date de rédaction de cet article:</p>
<ul>
<li><a href="https://bugs.webkit.org/show_bug.cgi?id=5566">Bug 5566 &#8211;  ALT attribute value not displayed when image is missing</a></li>
<li><a href="https://bugs.webkit.org/show_bug.cgi?id=11200">Bug 11200 &#8211;  Image alt text not included in plain-text version when copying</a></li>
</ul>
<p>Les conséquences sont alors visible sur un navigateur utilisant Webkit, et avec le javascript désactivé:</p>
<div id="attachment_158" class="wp-caption aligncenter" style="width: 216px"><img class="size-full wp-image-158 " title="missing_image" src="http://agopian.alwaysdata.net/blog/wp-content/uploads/2009/09/missing_image.png" alt="Image manquante sous Webkit" width="206" height="29" /><p class="wp-caption-text">Image manquante sous Webkit</p></div>
<p>De plus, l&#8217;adresse n&#8217;est plus copiable, mais le lien (vers le formulaire de contact) reste disponible.</p>
<p>Une solution serait alors d&#8217;utiliser une image contenant le symbole &laquo;&nbsp;@&nbsp;&raquo;, mais celà peut poser des problèmes de style (couleur, famille et taille de la police, anti-aliasing&#8230;):</p>
<div id="attachment_159" class="wp-caption aligncenter" style="width: 209px"><img class="size-full wp-image-159 " title="image_for_at" src="http://agopian.alwaysdata.net/blog/wp-content/uploads/2009/09/image_for_at.png" alt="Adresse email avec une image remplaçant le @" width="199" height="20" /><p class="wp-caption-text">Adresse email avec une image remplaçant le @</p></div>
<h4>Note</h4>
<p>Il est possible d&#8217;afficher l&#8217;attribut <code>alt</code> de l&#8217;image sous webkit, en forçant la taille de l&#8217;image pour qu&#8217;elle soit assez grande:</p>
<pre>&lt;img src="" style="height: 60px; vertical-align: top;" alt="@" /&gt;</pre>
<div id="attachment_160" class="wp-caption aligncenter" style="width: 212px"><img class="size-full wp-image-160 " title="missing_image_css" src="http://agopian.alwaysdata.net/blog/wp-content/uploads/2009/09/missing_image_css.png" alt="Image assez grande pour afficher l'attribut alt" width="202" height="62" /><p class="wp-caption-text">Image assez grande pour afficher l&#39;attribut alt</p></div>
<p>C&#8217;est hideux, mais ça reste lisible, et ça n&#8217;impacte que les quelques pourcents d&#8217;utilisateurs de webkit qui ont le javascript désactivé.</p>
<h3>Conclusion</h3>
<p>Voilà donc une nouvelle méthode d&#8217;obfuscation d&#8217;adresse email, qui devrait être efficace (au moins autant que les autres) contre les spambots, mais qui impacte le moins possible l&#8217;utilisateur final.<br />
Et surtout, l&#8217;adresse est accessible pour les lecteurs d&#8217;écrans!</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 594px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Image manquante sous Webkit</div>
]]></content:encoded>
			<wfw:commentRss>http://mathieu.agopian.info/blog/2009/09/obfuscation-de-lemail-alternative-et-accessible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
