Annuler le nl2br dans un array

Valentin45000
Invité n'ayant pas de compte PHPfrance

09 mai 2010, 19:00

Bonjour,
Bon je donne tout de suite le code :
<?php function parseZCode($content) {
	// Parsage des balises
	$zcode = array(  
		'`<couleur_rouge>(.+)</couleur_rouge>`isU',
		'`<couleur_bleu>(.+)</couleur_bleu>`isU',
		'`<couleur_vert>(.+)</couleur_vert>`isU',
		'`<couleur_turquoise>(.+)</couleur_turquoise>`isU',
		'`<code_php>(.+)</code_php>`isU', 
		'`<code_html>(.+)</code_html>`isU', 
		'`<code_css>(.+)</code_css>`isU', 
		'`<code_js>(.+)</code_js>`isU', 
		'`<italique>(.+)</italique>`isU',  
		'`<gras>(.+)</gras>`isU',
		'`<barre>(.+)</barre>`isU',
		'`<lien>(.+)</lien>`isU',
		'`<lien url="(.+)">(.+)</lien>`isU',
		'`<image>(.+)</image>`isU',
		'`<citation>(.+)</citation>`isU',
		'`<citation nom="(.+)">(.+)</citation>`isU',
		'`<citation lien="(.+)">(.+)</citation>`isU',
		'`<taille valeur="(.+)">(.+)</taille>`isU'
	);  
	
	$html = array(  
		'<font color="#BF0B0B">$1</font>', 
		'<font color="#0B3BBF">$1</font>', 
		'<font color="#0A7D12">$1</font>', 
		'<font color="#269CA9">$1</font>',  
		'<pre name="code" class="php">$1</pre>', 
		'<pre name="code" class="html">$1</pre>', 
		'<pre name="code" class="css">$1</pre>', 
		'<pre name="code" class="js">$1</pre>',  
		'<em>$1</em>',  
		'<strong>$1</strong>',
		'<del>$1</del>', 
		'<a href="$1">$1</a>',
		'<a href="$1">$2</a>',
		'<img src="$1" alt="Image utilisateur" />',
		'<br /><span class="citation">Citation</span><div class="citation2">$1</div>',
		'<br /><span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<br /><span class="citation"><a href="$1">Citation</a></span><div class="citation2">$2</div>',
		'<span class="$1">$2</span>'
	); 
	$content = htmlspecialchars($content);
	$content = preg_replace($zcode, $html, $content);
	
	// parsage des smilies
	$smiliesName = array(' :bleuh: ', ' :clin: ', ' :colere: ', ' :content: ', ' :euh: ', ' :g_s: ', ' :hein: ', ' :lol: ', ' :oh: ', ' :sourire: ', ' :triste: ', ' :zut: ');
	$smiliesUrl  = array( 'bleuh.jpg', 'clin.jpg', 'colere.jpg', 'content.jpg', 'euh.gif', 'g_s.jpg', 'hein.jpg', 'lol.gif', 'oh.jpg', 'sourire.jpg', 'triste.jpg', 'zut.jpg',);
	$smiliesPath = "http://pause-montage.host56.com/smilies/";
	
	for ($i = 0, $c = count($smiliesName); $i < $c; $i++) {
		$content = preg_replace('`' . $smiliesName[$i] . '`isU', '<img src="' . $smiliesPath . $smiliesUrl[$i] . '" alt="smiley" />', $content);
	}
	
	// Rtours à la ligne
	$content = $content; 
	
	return nl2br($content);

}
echo parseZCode($donnees['mess']); 
}
else{
echo "<b><font color=\"red\">Erreur 404</font></b>";
}?>
A la fin on voit le nl2br.
Problème je voudrais pas qu'il touche ses lignes :
'<pre name="code" class="php">$1</pre>', 
'<pre name="code" class="html">$1</pre>', 
'<pre name="code" class="css">$1</pre>', 
'<pre name="code" class="js">$1</pre>',  
Comment je peut faire ?
Merci d'avance.
Cordialement.

ViPHP
AB
ViPHP | 5818 Messages

09 mai 2010, 19:16

Le plus simple serait que tu formate ces lignes en questions pour qu'elles s'affichent correctement avec nl2br.

De toutes façons tu utilises un code obsolète ex : font color= ... profites en pour faire le ménage.
Et puis je ne vois pas à quoi peut servir $content = $content;

Valentin45000
Invité n'ayant pas de compte PHPfrance

09 mai 2010, 19:21

Moi non plus :lol:
Le plus simple serait que tu formate ces lignes en questions pour qu'elles s'affichent correctement avec nl2br.
Justement je ne veut pas que le nl2br prenne effet sur elle.

ViPHP
AB
ViPHP | 5818 Messages

09 mai 2010, 20:03

Bon disons les choses autrement :
A quoi servent les balises <pre> ? Ne pourrais tu pas les remplacer ?

Valentin45000
Invité n'ayant pas de compte PHPfrance

09 mai 2010, 21:03

Non je ne peut absolument pas les remplacer, elle font référence au script Syntaxhighlighter.

Eléphant du PHP | 170 Messages

09 mai 2010, 23:22

Bonsoir,

en espérant qu'il y ait une autre solution :? :
//      replacer "return nl2br($content);" par :

        $content = nl2br($content);
        $content = preg_replace('#(<pre name=.*</pre>)#se', "str_replace('<br />', '', '$1')", $content);
        return $content;
Sinon, je ne connais pas ce script "Syntaxhighlighter" ( j'imagine qu'il fait de la coloration syntaxique )
Mais es-tu sûr qu'il ne fonctionne pas si tu remplaces la balise "pre" par la balise "div" ?

Juste pour voir, si tu remplaces '<pre name="code" class="php">$1</pre>', par '<div name="code" class="php">$1</div>', ça donne quoi ?

ViPHP
AB
ViPHP | 5818 Messages

10 mai 2010, 00:11

Et puis comme déjà dit, il est obsolète ton code Syntaxhighlighter. On emploie plus fonte color depuis longtemps, et par exemple dans cette page il y a bien de la coloration syntaxique mais tu ne trouveras pas de balise <pre dans le code source.
Donc plutôt que de l'adapter aux nouvelles normes (ce qui doit être faisable) je me demande si tu ne ferais pas mieux d'en trouver un autre... ou chercher s'il n'y a pas une version plus récente.

valentin45000
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 10:41

En trouver un autre je veut bien, mais encore faut-il qu'il s'adapte à se code php, donc il doit pouvoir s'inclure en html comme Syntaxhighlighter, par exemple Geshi s'inclue avec du php.
Et à part ses deux là je voit pas.

valentin45000
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 18:57

"blof" ça ne marche pas.
Mais si vous avez une idée pour intégré Geshi je veut bien ^^

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 19:01

t'enlève le nl2br
et dans ton css tu rajoutes un white-space:pre; a ton body

valentin45000
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 19:27

Super !
J'en revient que la solution était si simple (tu me diras c'est toujours le plus simple que l'ont cherche jamais).

ViPHP
AB
ViPHP | 5818 Messages

10 mai 2010, 19:32

Oui mais il est peu propable que cela fonctionne avec d'anciennes versions d'IE (IE6 notamment). Cela dit si ça fonctionne à partir d'IE7 (à vérifier) tu peux peut-être faire l'impasse, après tout cette fonctionnalité n'est peut-être pas indispensable au bon fonctionnement de ton site...

valentin45000
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 19:56

Non effectivement, se n'est pas indispensable mais mieux.
Ceci dit vivement que IE marche aussi bien que FF (désolé pour les fan d'IE :lol: )