Changeset 419 in spip-zone


Ignore:
Timestamp:
Jul 18, 2005, 7:07:43 PM (15 years ago)
Author:
fil@…
Message:

un petit addslashes manquait
simplification du code d'extraction des tags (et reglage du bug des "")

Location:
_libs_/tag-machine
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _libs_/tag-machine/inc_gestion_tags.php

    r285 r419  
    4747$effacer_tag = $_POST['effacer_tag'] ;
    4848$effacer_valid  = $_POST['effacer_valid'] ;
    49 $id_tag = $_POST['id_tag'] ;
     49$id_tag = addslashes($_POST['id_tag']);
    5050
    5151if($effacer_tag AND ($effacer_valid AND $id_tag)){
  • _libs_/tag-machine/inc_tag-machine.php

    r401 r419  
    211211          $groupe = "\"groupe\"";
    212212        }
    213         $to_ret[] = $groupe.($groupe)?':':''.$mot;
     213        $to_ret[] = $groupe.($groupe)? ':':''.$mot;
    214214  }
    215215  spip_abstract_free($result);
     
    218218
    219219function parser_liste($liste_tags) {
    220   preg_match_all('/"([^"]+?)":"([^"]+?)"/',$liste_tags,$matches);
    221  
    222   for($i=0;$i<sizeof($matches[0]);$i++) {
    223         $groupe = $matches[1][$i];
    224         $tag = $matches[2][$i];
    225         $liste_tags = str_replace($matches[0][$i],'',$liste_tags);
    226         if($tag!='') {
    227           $tags[] = array('groupe' => $groupe,
    228                                           'tag' => $tag);
    229         }
    230   }
    231 
    232   $liste_tags .= ' ';
    233 
    234   preg_match_all('/"([^"]+?)":([^ ]+?) /',$liste_tags,$matches);
    235  
    236   for($i=0;$i<sizeof($matches[0]);$i++) {
    237         $groupe = $matches[1][$i];
    238         $tag = $matches[2][$i];
    239         $liste_tags = str_replace($matches[0][$i],'',$liste_tags);
    240         if($tag!='') {
    241           $tags[] = array('groupe' => $groupe,
    242                                           'tag' => $tag);
    243         }
    244   }
    245 
    246   $liste_tags = ' '.$liste_tags;
    247 
    248   preg_match_all('/ ([^: ]+?):"([^"]+?)"/',$liste_tags,$matches);
    249  
    250   for($i=0;$i<sizeof($matches[0]);$i++) {
    251         $groupe = $matches[1][$i];
    252         $tag = $matches[2][$i];
    253         $liste_tags = str_replace($matches[0][$i],'',$liste_tags);
    254         if($tag!='') {
    255           $tags[] = array('groupe' => $groupe,
    256                                           'tag' => $tag);
    257         }
    258   }
    259 
    260   $liste_tags .= ' ';
    261 
    262   preg_match_all('/([^: ]+?):([^ ]+?) /',$liste_tags,$matches);
    263  
    264   for($i=0;$i<sizeof($matches[0]);$i++) {
    265         $groupe = $matches[1][$i];
    266         $tag = $matches[2][$i];
    267         $liste_tags = str_replace($matches[0][$i],'',$liste_tags);
    268         if($tag!='') {
    269           $tags[] = array('groupe' => $groupe,
    270                                           'tag' => $tag);
    271         }
    272   }
    273 
    274   $matches = split(' ',$liste_tags);
    275 
    276   for($i=0;$i<sizeof($matches);$i++) {
    277         $tag = $matches[$i];
    278         if($tag!='') {
    279           $tags[] = array('groupe' => '',
    280                                           'tag' => $tag);
    281         }
    282   }
    283 
    284   return $tags;
     220
     221        // supprimer les tab (notre separateur final)
     222        $liste_tags = strtr($liste_tags, "\t", " ");
     223
     224        // doubler les caracteres qui peuvent faire office de separateur
     225        $liste_tags = ' '.preg_replace('/[[:space:],]/', '\\0\\0', $liste_tags).' ';
     226
     227        // trouver les tags et les separer par \t
     228        $liste_tags = preg_replace('/[[:space:],]+("?)(.*?)\\1[[:space:],]/', "\t\\2", $liste_tags);
     229
     230        // remettre les caracteres doubles en simple
     231        $liste_tags = preg_replace('/([[:space:],])\\1/', '\\1', $liste_tags);
     232
     233        // exploser selon les tab
     234        $tags = split("\t", substr($liste_tags,1));
     235
     236        // recuperer les groupes sous la forme  <groupe:mot>
     237        foreach ($tags as $i => $tag) {
     238                $tag = str_replace('"', '', $tag);
     239                preg_match('/((.*):)?(.*)/', $tag, $regs);
     240                $tags[$i] = array('groupe' => $regs[2], 'tag' => $regs[3]);
     241        }
     242
     243        return $tags;
    285244}
    286245?>
Note: See TracChangeset for help on using the changeset viewer.