8792 sujets

Développement web côté serveur, CMS

Bonjour,
je cherche à supprimer les éventuels <br />
compris entre des balises
<ul> et <li> ou
</li> et <li> ou
</li> et </ul>

Voici un exemple :

INCORRECT

<ul>
<br /><li>blablabla</li>
<br /><li>reblabla</li>
<br /></ul>


CORRECT

<ul>
<li>blablabla</li>
<li>reblabla</li>
</ul>


Etant completement nul en regexp, je me demande a tout hasard si quelqu'un connait la solution...

Merci d'avance !
Smiley r2d2
Administrateur
Bonjour,

Alsacreations n'est pas spécialisé dans ce domaine même si de nombreux membres doivent maîtriser le sujet. Tu trouveras en bas de page des forums de sites partenaires plus spécialisés, et il y a aussi PHP-débutant.
Toutefois, voici 3 bons tutos sur le sujet (il y en a certainement des dizaines d'autres):
Les expressions régulières
Les expressions régulières PCRE
Les expressions régulières compatibles PERL en PHP
et la doc de preg_replace si tu utilises PHP.

Tu cherches à remplacer <ul(qqch comme class et id)> puis (du texte) puis <br(espace ou pas)(slash / ou pas quand la balise est pas fermée)> puis (du texte) et enfin </ul> si j'ai rien oublié.
Ce sera à remplacer par <ul(identique)> puis (identique) puis (rien, on vire le <br, les espaces et les slashes et >) puis (identique) puis </ul>
Les parenthèses capturantes, la syntaxe $1 ou \\1 et l'option i (PCRE_CASELESS) sont utiles dans ce cas.
Comme c'est un peu de la théorie pour moi, je sais pas ce qui se passe ou que faire s'il y a de multiples <br /> ... (j'ai ma petite idée mais côté perf hum)

En vrac: faut-il garder un <br /> qui se trouverait en commentaire, peut-il se retrouver en texte d'un élément de liste (cas de la doc HTML du W3C 'la balise <br />'), est-ce que &lt;br /&gt; est capturé et le faut-il?
Bonjour

personnellement j'utiliserais l'expression comme suit :

$pattern = '#(<ul>)?<br /><(li|/ul)>#';
$replace = '\\1\\2';


tu utilises str_replace (;)) ou ereg_replace, ou encore preg_replace (je préfère)
j'ai pas tester, mais ca devrait être dans ce sens qu'il faut procéder

sinon j'ai autre fonction qui peut peut-être t'être (huh Smiley langue ) utile
si tu as par exemple :

# code de base
<span class="foo">lorem</span><span class="foo"> ipsum</span>
# la fonction te retourne
<span class="foo">lorem ipsum</span>
# c'est un exemple [smile]

elle peut faire aussi plus, mais le temps me presse mince, alors je me dépêche de poster Smiley langue

voici la fonction rapidement (elle sert grossièrement à nettoyer le code html Smiley smile )

<?php

function cleanUpHTML($src) {

	$patter = '#<([[:alnum:]])( [^>]*)?>(.*?)</\\1><\\1\\2>(.*)</\\1>#';
	$replacement = ''<\\1\\2>\\3\\4</\\1>';

	while(true) {
		$nhtml = preg_replace($pattern, $replacement, $src);
		if($nhtml = $html)
			break;
		$html = $nhtml;
	}
}

?>


simple mais utile quand on doit refaire le site de quelqu'un qui a travaillé avec FrontPage ou Dreamweaver Smiley sweatdrop

'service
Modifié par HyWaN (29 Jul 2006 - 20:32)
Il suffit de lancer un remplacement avec n'importe quel éditeur :
- '<br /><li>' par <li>
- '<br /></ul>' par </ul>
etc.

Il n'y a pas plus simple.