Skip to content
Extraits de code Groupes Projets
Valider 432ac640 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

extraire_atribut qui va mieux ? (passe tous les tests en tout cas ...)

parent 50a39726
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -1189,28 +1189,30 @@ function extraire_tag($texte, $tag) { ...@@ -1189,28 +1189,30 @@ function extraire_tag($texte, $tag) {
// ($complet demande de retourner $r) // ($complet demande de retourner $r)
// http://doc.spip.org/@extraire_attribut // http://doc.spip.org/@extraire_attribut
function extraire_attribut($balise, $attribut, $complet = false) { function extraire_attribut($balise, $attribut, $complet = false) {
if (preg_match( $value = NULL;
// ',(.*?<[^>]*)(\s'.$attribut.'=\s*([\'"]?)([^\\3]*?)\\3)([^>]*>.*),isS', $attribut = strtolower($attribut);
',(.*?<(?:\s*+\w++(?:=(?:"[^"]*"|\'[^\']*\'|[^\'"]\S*))?)*?)(\s+'.$attribut.'(?:=\s*("[^"]*"|\'[^\']*\'|[^\'"]\S*))?)()([^>]*>.*),isS', // on ne prend que la premiere balise qui se presente
$balise, $r)) { if (!preg_match("{<([a-z]*)([^>]*?)>}is",$balise,$regs))
if ($r[3][0] == '"' || $r[3][0] == "'") { return $value;
$r[4] = substr($r[3], 1, -1); $tagname = $regs[1];
$r[3] = $r[3][0]; $balise = $regs[2];
} elseif ($r[3]) {
$r[4] = $r[3]; // 3 types d'attributs : valeur sans guillemets, entre guillemets ou quote, ou autodefinis (sans valeur)
$r[3] = ''; preg_match_all(',(([a-z]+)((\s*=\s*([^\s\'"]+))|(\s*=\s*([\'"]?)([^\\7]*?)\\7)|\s)),isS',$balise,$regs,PREG_SET_ORDER);
} else {
$r[4] = trim($r[2]); 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("&#39;", "'", end($reg)));
break;
} }
$att = filtrer_entites(str_replace("&#39;", "'", $r[4]));
} }
else
$att = NULL;
if ($complet) if ($complet)
return array($att, $r); return array($value, $att_complet);
else else
return $att; return $value;
} }
// modifier (ou inserer) un attribut html dans une balise // modifier (ou inserer) un attribut html dans une balise
...@@ -1226,11 +1228,11 @@ function inserer_attribut($balise, $attribut, $val, $texte_backend=true, $vider= ...@@ -1226,11 +1228,11 @@ function inserer_attribut($balise, $attribut, $val, $texte_backend=true, $vider=
else else
$insert = " $attribut='$val' "; $insert = " $attribut='$val' ";
list($old, $r) = extraire_attribut($balise, $attribut, true); list($old, $att_complet) = extraire_attribut($balise, $attribut, true);
if ($old !== NULL) { if ($old !== NULL) {
// Remplacer l'ancien attribut du meme nom // Remplacer l'ancien attribut du meme nom
$balise = $r[1].$insert.$r[5]; $balise = str_replace($att_complet,$insert,$balise);
} }
else { else {
// preferer une balise " />" (comme <img />) // preferer une balise " />" (comme <img />)
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter