Conversion de fragment HTML en codes UTF-8 encapsulés en Javascript
Le 28 octobre 2007, à 1:18 par Ulhume...

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.

Les deux fonctions qui suivent sont un exemple d'utilisation pour l'encodage respectivement des formulaires et des liens avec Drupal.

  1. define ("BLOCK_SIZE",100);
  2. function riddle_javascript_encode($html)
  3. {
  4.   // Encodage du formulaire
  5.   $result='<script>';
  6.   while (strlen($html)>0)
  7.   {
  8.     $block=substr($html,0,BLOCK_SIZE);
  9.     $html=substr($html,BLOCK_SIZE);
  10.     $result.="\ndocument.write(String.fromCharCode(";
  11.     $nbCodes=0;
  12.     $len=strlen($block);
  13.     $iChar=0;
  14.     while ($iChar<$len)
  15.     {
  16.       $h = ord($block{$iChar});
  17.       if ($h <= 0x7F) {
  18.         $code=$h;
  19.         $iChar++;
  20.       } else if ($h < 0xC2) {
  21.         $code=0;
  22.         $iChar++;
  23.       } else if ($h <= 0xDF && $iChar < $len - 1)  {
  24.         $code=($h & 0x1F) <<  6 | (ord($block{$iChar + 1}) & 0x3F);
  25.         $iChar+=2;
  26.       } else if ($h <= 0xEF && $iChar < $len - 2)  {
  27.         $code=($h & 0x0F) << 12 | (ord($block{$iChar + 1}) & 0x3F) << 6 | (ord($block{$iChar + 2}) & 0x3F);
  28.         $iChar+=3;
  29.       } else if ($h <= 0xF4 && $iChar < $len - 3)  {
  30.         $code=($h & 0x0F) << 18 | (ord($block{$iChar + 1}) & 0x3F) << 12 | (ord($block{$iChar + 2}) & 0x3F) << 6 | (ord($block{$iChar + 3}) & 0x3F);
  31.         $iChar+=4;
  32.       } else {
  33.         $code=0;
  34.         $iChar++;
  35.       }
  36.  
  37.       if ($code != 0)
  38.       {
  39.         if ($nbCodes>0)
  40.           $result.=',';
  41.         $result.=$code;
  42.         $nbCodes++;
  43.       }
  44.       else
  45.         error_log("missing [".$iChar."]".substr($block,$iChar,1)." <--".$block);
  46.     }
  47.     $result .= "));";
  48.   }
  49.   $result .= "\n</script>";
  50.   return $result;
  51. }
  52. function phptemplate_form($element)
  53. {
  54.   // Génération du formulaire (copie du code drupal)
  55.   $html=theme_form($element);
  56.  
  57.   // condition de by-pass de l'encodeur
  58.   global $user;
  59.   if ($user->uid!=0 || $element['#id']=='search-block-form')
  60.     return $html;
  61.  
  62.   // Affichage d'un message d'avertissement
  63.   $path= karmaLab_common_images_path();
  64.   $temp="<img src='$path/attention.png' class='bullet'/><div class='inline-box attention'>Attention, ce formulaire pour fonctionner demande à ce que <b>javascript soit activé</b>. Si vous avez le montre problème, veuille m'envoyer un courriel à $ (en enlevant le <b>bad_</b>)</div>";
  65.  
  66.   $temp.=riddle_javascript_encode($html);
  67.   return $temp;
  68. }
  69.  
  70. /**
  71.   fonction utilisée pour "hacker" un thème donné pour les liens. Utilisé de manière indirecte.
  72.   @param $theme nom du theme à hacker
  73.   @param $links liens à thémer
  74.   @return code HTML
  75.   */
  76. function phptemplate_links($links, $attributes = array('class' => 'links'))
  77. {
  78.   $html = theme_links($links, $attributes);
  79.   // condition de by-pass de l'encodeur
  80.   global $user;
  81.   if ($user->uid!=0)
  82.     return $html;
  83.  
  84.   return riddle_javascript_encode($html);
  85. }

Commentaires

Répondre

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...