From 49d0a0e4dbdfbaf58c26670aeff9d69dadf14703 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Mon, 22 Jan 2007 17:22:35 +0000 Subject: [PATCH] 8459 etait 10% plus rapide que 8460, donc retour en arriere --- ecrire/inc/filtres.php | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 059764289c..b69372fa85 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -1189,30 +1189,28 @@ function extraire_tag($texte, $tag) { // ($complet demande de retourner $r) // http://doc.spip.org/@extraire_attribut function extraire_attribut($balise, $attribut, $complet = false) { - $value = NULL; - $attribut = strtolower($attribut); - // on ne prend que la premiere balise qui se presente - if (!preg_match("{<([a-z]*)([^>]*?)>}is",$balise,$regs)) - return $value; - $tagname = $regs[1]; - $balise = $regs[2]; - - // 3 types d'attributs : valeur sans guillemets, entre guillemets ou quote, ou autodefinis (sans valeur) - preg_match_all(',(([a-z]+)((\s*=\s*([^\s\'"]+))|(\s*=\s*([\'"]?)([^\\7]*?)\\7)|\s)),isS',$balise,$regs,PREG_SET_ORDER); - - foreach($regs as $reg){ - if ($attribut==strtolower($reg[2])){ - $value = $reg[2]; - $att_complet = $reg[0]; - if (count($reg)>4) // ca n'est pas une entite auto definie - $value = filtrer_entites(str_replace("'", "'", end($reg))); - break; + if (preg_match( +// ',(.*?<[^>]*)(\s'.$attribut.'=\s*([\'"]?)([^\\3]*?)\\3)([^>]*>.*),isS', + ',(.*?<(?:\s*+\w++(?:=(?:"[^"]*"|\'[^\']*\'|[^\'"]\S*))?)*?)(\s+'.$attribut.'(?:=\s*("[^"]*"|\'[^\']*\'|[^\'"]\S*))?)()([^>]*>.*),isS', + $balise, $r)) { + if ($r[3][0] == '"' || $r[3][0] == "'") { + $r[4] = substr($r[3], 1, -1); + $r[3] = $r[3][0]; + } elseif ($r[3]) { + $r[4] = $r[3]; + $r[3] = ''; + } else { + $r[4] = trim($r[2]); } + $att = filtrer_entites(str_replace("'", "'", $r[4])); } + else + $att = NULL; + if ($complet) - return array($value, $att_complet); + return array($att, $r); else - return $value; + return $att; } // modifier (ou inserer) un attribut html dans une balise @@ -1228,11 +1226,11 @@ function inserer_attribut($balise, $attribut, $val, $texte_backend=true, $vider= else $insert = " $attribut='$val' "; - list($old, $att_complet) = extraire_attribut($balise, $attribut, true); + list($old, $r) = extraire_attribut($balise, $attribut, true); if ($old !== NULL) { // Remplacer l'ancien attribut du meme nom - $balise = str_replace($att_complet,$insert,$balise); + $balise = $r[1].$insert.$r[5]; } else { // preferer une balise " />" (comme <img />) -- GitLab