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) {
// ($complet demande de retourner $r)
// http://doc.spip.org/@extraire_attribut
function extraire_attribut($balise, $attribut, $complet = false) {
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]);
$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("&#39;", "'", end($reg)));
break;
}
$att = filtrer_entites(str_replace("&#39;", "'", $r[4]));
}
else
$att = NULL;
if ($complet)
return array($att, $r);
return array($value, $att_complet);
else
return $att;
return $value;
}
// modifier (ou inserer) un attribut html dans une balise
......@@ -1226,11 +1228,11 @@ function inserer_attribut($balise, $attribut, $val, $texte_backend=true, $vider=
else
$insert = " $attribut='$val' ";
list($old, $r) = extraire_attribut($balise, $attribut, true);
list($old, $att_complet) = extraire_attribut($balise, $attribut, true);
if ($old !== NULL) {
// Remplacer l'ancien attribut du meme nom
$balise = $r[1].$insert.$r[5];
$balise = str_replace($att_complet,$insert,$balise);
}
else {
// 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