petit problème preg_replace : réglé

  • Auteur de la discussion Auteur de la discussion yep
  • Date de début Date de début
WRInaute occasionnel
salut à tous
mon problème est simple : je souhaite mettre en majuscule tous les attributs (et pas leur contenu) des balises HTML

Voici mon code:

Code:
  $mask = "#([a-zA-Z0-1\-_]+)=(('|\")|)(.*?)(?(3)(\\3)|( |>))#si";
  $repl = strtoupper('\\1').'="\\4"';
  $res = preg_replace($mask,$repl,$contenu_balise);

La fonction permettant de mettre le contenu en majuscule ne fonctionne pas, où ai-je fait une erreur ?
Quelqu'un peut-il m'aider ?
merci d'avance :p
 
WRInaute passionné
pourquoi faire simple quand on peut faire compliqué ;)

Code:
function to_upper($str){
return strtr($str, 
          "abcdefghijklmnopqrstuvwxyz", 
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}

poum poum poum
 
WRInaute occasionnel
je viens de trouver (2 minutes après avoir posté le message alors que cela faisait presque 2 heures que je cherchais sur le net)

Code:
  $mask = "#([a-zA-Z0-1\-_]+)=(('|\")|)(.*?)(?(3)(\\3)|( |>))#sie";
  $repl = "strtoupper('\\1').'=\"\\4\"'";
  $r = preg_replace($mask,"strtoupper('\\1').'=\"\\4\"'",$contenu_balise);

C'était juste l'option 'e' à rajouter :p
 
Nouveau WRInaute
Re: petit problème preg_replace :p

aladdin a dit:
poum poum poum
mais non il veut seulement mettre le noms des attributs en majuscule !

yep tu t'as trompé de sens, les attributs doivent être en minuscule en xhtml !

et voila la correction avec tests intégrés ;)
Code:
$avant = '<a HReF="aaaaAA">ezzerzer</A>';

echo htmlspecialchars($avant) . "<br/>";

$mask = "#([a-zA-Z0-1\-_]+)=(('|")|)(.*?)(?(3)(\\3)|( |>))#sie";
$repl = 'strtolower(\'\\1\').\'="\\4"\'';
$res = preg_replace($mask, $repl, $avant);

echo htmlspecialchars($res) . "<br/>";

n'hésite pas à faire plein de tests je n'ai pas trop regardé ton code
 
Discussions similaires
Haut