8795 sujets

Développement web côté serveur, CMS

Bonjour,

je m'arrache le peu de cheveux qu'il me reste pour réaliser une opération a priori simple : mon CMS me retourne une variable qui contient :
<div id="foo-bar-1">Lorem</div>
<div id="foo-bar-2">Ipsum</div>


Je souhaiterais tout simplement obtenir la chaîne :
Lorem, Ipsum


Je joue avec strip_tags et des bouts d'expressions régulière que je trouve un peu partout sur le net, mais je n'arrive pas à obtenir ce que je veux... Smiley sweatdrop

Comment dois-je procéder ? Merci d'avance à toutes les bonnes âmes prêtes à me filer un coup de main là-dessus ! Smiley smile
Modifié par lionel (24 May 2010 - 16:14)
Salut,

Si la variable retournée par le CMS est une chaine alpha-numérique, tu peux faire comme ci-dessous :

$subject='<div id="foo-bar-1">Lorem</div>'."\n".'<div id="foo-bar-2">Ipsum</div>';

if(preg_match_all('%<div\s+id\s*=\s*"foo-bar-[0-9]">([^<]+)</div>\s*%', $subject, $result, PREG_PATTERN_ORDER)) {
	$s = implode(',', $result[1]);
	echo $s;
}
?>

Cet exemple est fonctionnel uniquement si les balises DIV sont séparés les unes des autres par d'éventuels espaces et/ou retours à la ligne.
Mon CMS (Drupal en l'occurrence) me retourne un ou plusieurs <div>, sans espaces. En regardant la définition de preg_match_all dans la doc PHP, je suis tombé sur un exemple presque tout fait ; les balises peuvent être collées et/ou séparées par des espaces et/ou des retours :

$string = '<div class="field-item field-item-0">Lorem</div>\r<div class="field-item field-item-1">Ipsum</div> <div class="field-item field-item-2">Dolor</div><div class="field-item field-item-3">Sit</div>';

preg_match_all("|<[^>]+>(.*)</[^>]+>|U", $string, $out, PREG_PATTERN_ORDER);

$string = implode(', ', $out[1]);

echo $string;


Je n'ai plus qu'à emballer ça dans une fonction et je suis sauvé (sur ce point en tout cas) !

Merci pour ta réponse Smiley smile