<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1249"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1249/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1249/atom/feed</id>
  <updated>2008-02-12T11:06:18+01:00</updated>
  <entry>
    <title>Conversion de fragment HTML en codes UTF-8 encapsulés en Javascript</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1249" />
    <id>http://artisan.karma-lab.net/node/1249</id>
    <published>2007-10-28T01:18:38+02:00</published>
    <updated>2008-02-12T11:06:18+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="jQuery" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>Une petite procédure PHP qui permet d'encoder un fragment de texte (généralement un formulaire HTML à protéger des spammeurs ou de Google) en son équivalent numérique/UTF en javaScript.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Une petite procédure PHP qui permet d'encoder un fragment de texte (généralement un formulaire HTML à protéger des spammeurs ou de Google) en son équivalent numérique/UTF en javaScript.</p>
<!--break-->
<p>
Les deux fonctions qui suivent sont un exemple d'utilisation pour l'encodage respectivement des formulaires et des liens avec Drupal. 

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://www.php.net/define"><span class="kw3">define</span></a> <span class="br0">&#40;</span><span class="st0">&quot;BLOCK_SIZE&quot;</span><span class="sy0">,</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<a target="blank" href="http://www.php.net/function"><span class="kw2">function</span></a> riddle_javascript_encode<span class="br0">&#40;</span><span class="re0">$html</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="co1">// Encodage du formulaire</span><br />
&nbsp; <span class="re0">$result</span><span class="sy0">=</span><span class="st0">'&lt;script&gt;'</span><span class="sy0">;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/while"><span class="kw1">while</span></a> <span class="br0">&#40;</span><a target="blank" href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$html</span><span class="br0">&#41;</span><span class="sy0">&gt;</span><span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$block</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$html</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span>BLOCK_SIZE<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$html</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$html</span><span class="sy0">,</span>BLOCK_SIZE<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">.=</span><span class="st0">&quot;<span class="es0">\n</span>document.write(String.fromCharCode(&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$nbCodes</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$len</span><span class="sy0">=</span><a target="blank" href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$block</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$iChar</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/while"><span class="kw1">while</span></a> <span class="br0">&#40;</span><span class="re0">$iChar</span><span class="sy0">&lt;</span><span class="re0">$len</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$h</span> <span class="sy0">=</span> <a target="blank" href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="re0">$block</span><span class="br0">&#123;</span><span class="re0">$iChar</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$h</span> <span class="sy0">&lt;=</span> 0x7F<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$code</span><span class="sy0">=</span><span class="re0">$h</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iChar</span><span class="sy0">++;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <a target="blank" href="http://www.php.net/else"><span class="kw1">else</span></a> <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$h</span> <span class="sy0">&lt;</span> 0xC2<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$code</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iChar</span><span class="sy0">++;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <a target="blank" href="http://www.php.net/else"><span class="kw1">else</span></a> <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$h</span> <span class="sy0">&lt;=</span> 0xDF <span class="sy0">&amp;&amp;</span> <span class="re0">$iChar</span> <span class="sy0">&lt;</span> <span class="re0">$len</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span> &nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$code</span><span class="sy0">=</span><span class="br0">&#40;</span><span class="re0">$h</span> <span class="sy0">&amp;</span> 0x1F<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> &nbsp;<span class="nu0">6</span> <span class="sy0">|</span> <span class="br0">&#40;</span><a target="blank" href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="re0">$block</span><span class="br0">&#123;</span><span class="re0">$iChar</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0x3F<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iChar</span><span class="sy0">+=</span><span class="nu0">2</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <a target="blank" href="http://www.php.net/else"><span class="kw1">else</span></a> <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$h</span> <span class="sy0">&lt;=</span> 0xEF <span class="sy0">&amp;&amp;</span> <span class="re0">$iChar</span> <span class="sy0">&lt;</span> <span class="re0">$len</span> <span class="sy0">-</span> <span class="nu0">2</span><span class="br0">&#41;</span> &nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$code</span><span class="sy0">=</span><span class="br0">&#40;</span><span class="re0">$h</span> <span class="sy0">&amp;</span> 0x0F<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> <span class="nu0">12</span> <span class="sy0">|</span> <span class="br0">&#40;</span><a target="blank" href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="re0">$block</span><span class="br0">&#123;</span><span class="re0">$iChar</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0x3F<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> <span class="nu0">6</span> <span class="sy0">|</span> <span class="br0">&#40;</span><a target="blank" href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="re0">$block</span><span class="br0">&#123;</span><span class="re0">$iChar</span> <span class="sy0">+</span> <span class="nu0">2</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0x3F<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iChar</span><span class="sy0">+=</span><span class="nu0">3</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <a target="blank" href="http://www.php.net/else"><span class="kw1">else</span></a> <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$h</span> <span class="sy0">&lt;=</span> 0xF4 <span class="sy0">&amp;&amp;</span> <span class="re0">$iChar</span> <span class="sy0">&lt;</span> <span class="re0">$len</span> <span class="sy0">-</span> <span class="nu0">3</span><span class="br0">&#41;</span> &nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$code</span><span class="sy0">=</span><span class="br0">&#40;</span><span class="re0">$h</span> <span class="sy0">&amp;</span> 0x0F<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> <span class="nu0">18</span> <span class="sy0">|</span> <span class="br0">&#40;</span><a target="blank" href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="re0">$block</span><span class="br0">&#123;</span><span class="re0">$iChar</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0x3F<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> <span class="nu0">12</span> <span class="sy0">|</span> <span class="br0">&#40;</span><a target="blank" href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="re0">$block</span><span class="br0">&#123;</span><span class="re0">$iChar</span> <span class="sy0">+</span> <span class="nu0">2</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0x3F<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> <span class="nu0">6</span> <span class="sy0">|</span> <span class="br0">&#40;</span><a target="blank" href="http://www.php.net/ord"><span class="kw3">ord</span></a><span class="br0">&#40;</span><span class="re0">$block</span><span class="br0">&#123;</span><span class="re0">$iChar</span> <span class="sy0">+</span> <span class="nu0">3</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0x3F<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iChar</span><span class="sy0">+=</span><span class="nu0">4</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <a target="blank" href="http://www.php.net/else"><span class="kw1">else</span></a> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$code</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iChar</span><span class="sy0">++;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$code</span> <span class="sy0">!=</span> <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$nbCodes</span><span class="sy0">&gt;</span><span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">.=</span><span class="st0">','</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">.=</span><span class="re0">$code</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$nbCodes</span><span class="sy0">++;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/else"><span class="kw1">else</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://www.php.net/error_log"><span class="kw3">error_log</span></a><span class="br0">&#40;</span><span class="st0">&quot;missing [&quot;</span><span class="sy0">.</span><span class="re0">$iChar</span><span class="sy0">.</span><span class="st0">&quot;]&quot;</span><span class="sy0">.</span><a target="blank" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$block</span><span class="sy0">,</span><span class="re0">$iChar</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot; &lt;--&quot;</span><span class="sy0">.</span><span class="re0">$block</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="re0">$result</span> <span class="sy0">.=</span> <span class="st0">&quot;));&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="re0">$result</span> <span class="sy0">.=</span> <span class="st0">&quot;<span class="es0">\n</span>&lt;/script&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="re0">$result</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span><br />
<a target="blank" href="http://www.php.net/function"><span class="kw2">function</span></a> phptemplate_form<span class="br0">&#40;</span><span class="re0">$element</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="co1">// Génération du formulaire (copie du code drupal)</span><br />
&nbsp; <span class="re0">$html</span><span class="sy0">=</span>theme_form<span class="br0">&#40;</span><span class="re0">$element</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="co1">// condition de by-pass de l'encodeur</span><br />
&nbsp; <a target="blank" href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$user</span><span class="sy0">;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$user</span><span class="sy0">-&gt;</span><span class="me1">uid</span><span class="sy0">!=</span><span class="nu0">0</span> <span class="sy0">||</span> <span class="re0">$element</span><span class="br0">&#91;</span><span class="st0">'#id'</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="st0">'search-block-form'</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="re0">$html</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="co1">// Affichage d'un message d'avertissement</span><br />
&nbsp; <span class="re0">$path</span><span class="sy0">=</span> karmaLab_common_images_path<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$temp</span><span class="sy0">=</span><span class="st0">&quot;&lt;img src='$path/attention.png' class='bullet'/&gt;&lt;div class='inline-box attention'&gt;Attention, ce formulaire pour fonctionner demande à ce que &lt;b&gt;javascript soit activé&lt;/b&gt;. Si vous avez le montre problème, veuille m'envoyer un courriel à $<script>document.write(String.fromCharCode(60,97,32,104,114,101,102,61,39,109,97,105,108,116,111,58,116,104,101,109,101,46,117,108,104,117,109,101,64,98,97,100,95,107,97,114,109,97,45,108,97,98,46,110,101,116,39,62,116,104,101,109,101,46,117,108,104,117,109,101,64,98,97,100,95,107,97,114,109,97,45,108,97,98,46,110,101,116,60,47,97,62));</script> (en enlevant le &lt;b&gt;bad_&lt;/b&gt;)&lt;/div&gt;&quot;</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="re0">$temp</span><span class="sy0">.=</span>riddle_javascript_encode<span class="br0">&#40;</span><span class="re0">$html</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="re0">$temp</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/**<br />
&nbsp; fonction utilisée pour &quot;hacker&quot; un thème donné pour les liens. Utilisé de manière indirecte.<br />
&nbsp; @param $theme nom du theme à hacker<br />
&nbsp; @param $links liens à thémer<br />
&nbsp; @return code HTML<br />
&nbsp; */</span><br />
<a target="blank" href="http://www.php.net/function"><span class="kw2">function</span></a> phptemplate_links<span class="br0">&#40;</span><span class="re0">$links</span><span class="sy0">,</span> <span class="re0">$attributes</span> <span class="sy0">=</span> <a target="blank" href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">'class'</span> <span class="sy0">=&gt;</span> <span class="st0">'links'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$html</span> <span class="sy0">=</span> theme_links<span class="br0">&#40;</span><span class="re0">$links</span><span class="sy0">,</span> <span class="re0">$attributes</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="co1">// condition de by-pass de l'encodeur</span><br />
&nbsp; <a target="blank" href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$user</span><span class="sy0">;</span><br />
&nbsp; <a target="blank" href="http://www.php.net/if"><span class="kw1">if</span></a> <span class="br0">&#40;</span><span class="re0">$user</span><span class="sy0">-&gt;</span><span class="me1">uid</span><span class="sy0">!=</span><span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> <span class="re0">$html</span><span class="sy0">;</span><br />
<br />
&nbsp; <a target="blank" href="http://www.php.net/return"><span class="kw1">return</span></a> riddle_javascript_encode<span class="br0">&#40;</span><span class="re0">$html</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>    ]]></content>
  </entry>
</feed>
