Page 1 sur 1

Formatage commentaire

Posté : 09 mai 2014, 12:39
par wng
Bonjour, j'ai un souci avec mes expressions régulière pour le formatage de text plain en p html pour l'affichage formater des commentaires, voici mes functions :
function _clean($string) {
	$string = preg_replace("/[\\\]+n/i", "\n", $string);
	$string = preg_replace("/[\\\]+r/i", "\r", $string);
	$string = stripslashes($string);
	return $string;
}
function _format($string) {
	$string = _clean($string);
	$string = preg_replace("/\n(?=(?:.(?!\[code\]))*\[\/code\])/Ums", "[t]", $string); // Protection des \n dans les pre
	$string = preg_replace("/\r(?=(?:.(?!\[code\]))*\[\/code\])/Ums", "[t]", $string); // protection des \r dans les pre
	$string = preg_replace("/(\r|\n)+/", "\n", $string); // suppression des \n et \r dans le text plain
	$string = preg_replace("/^([ ])+/", "", $string); // suppression des espaces en début de ligne dans le text plain
	$string = preg_replace(array("/(\[t\])?\[code\]/i", "/\[\/code\]/i"), array("<pre class=\"code\">", "</pre>"), $string); // remplacement du bbcode
	$string = preg_replace(array("/\[b\]/i", "/\[\/b\]/i"), array("<strong>", "</strong>"), $string);
	$string = preg_replace("/^(<pre class=\"code\">)(.*)\n?/i", "<p>$2</p>\n", $string);
	// $string = preg_replace("/\n(?=(?:.(?!<p>))*<\/p>)/Ums", "", $string);
	// $string = preg_replace("/^([^<]+)\n?/i", "<p>$1</p>", $string);
	$string = preg_replace("/\[t\](?=(?:.(?!<pre class=\"code\">))*<\/pre>)/U", "\n", $string); // Formatage du pre avant le hightlight code
	$string = preg_replace("/(\n){2,}(?=(?:.(?!<pre class=\"code\">))*<\/pre>)/Ums", "\n", $string);
	return $string;
}
Mon souci est au niveau des deux preg_replace commenter, je n'arrive pas à dissocier le text plain qui ne doit pas remplacer ni intéragir avec les balises pre, mais doit ce comporter par ligne unique ...

EDIT : '$string = preg_replace("/^(<pre class=\"code\">)(.*)\n?/i", "<p>$2</p>\n", $string);' c'est la dernière regex tester ... résultat null :/ merci d'avance !

Re: Formatage commentaire

Posté : 09 mai 2014, 14:11
par wng
Voici une solution pas propre dutout mais qui fonctionne, si quelqu'un a mieu à me proposer je suis preneur !
function _format($string) {
	$string = _clean($string);
	$string = preg_replace("/\n(?=(?:.(?!\[code\]))*\[\/code\])/Ums", "[t]", $string);
	$string = preg_replace("/\r(?=(?:.(?!\[code\]))*\[\/code\])/Ums", "[t]", $string);
	$string = preg_replace("/(\r|\n)+/", "\n", $string);
	$string = preg_replace("/^([ ])+/", "", $string);
	$string = preg_replace(array("/(\[t\])?\[code\]/i", "/\[\/code\]/i"), array("<pre class=\"code\">", "</pre>"), $string);
	$string = preg_replace(array("/\[b\]/i", "/\[\/b\]/i"), array("<strong>", "</strong>"), $string);
	
	$string = preg_replace("/\n?(.*)\n?/i", "<p>$1</p>\n", $string); // Pas propre ...
	$string = preg_replace("/<p><pre/i", "<pre", $string);
	$string = preg_replace("/pre><\/p>/i", "pre>", $string);
	$string = preg_replace("/\n?<p><\/p>\n?/i", "", $string);

	$string = preg_replace("/\[t\](?=(?:.(?!<pre class=\"code\">))*<\/pre>)/U", "\n", $string);
	$string = preg_replace("/(\n){2,}(?=(?:.(?!<pre class=\"code\">))*<\/pre>)/Ums", "\n", $string);
	return $string;
}

Re: Formatage commentaire

Posté : 11 mai 2014, 13:34
par telnes
Hello

Pour info il y a la fonction trim() a la 'place' de ta fct clean()

Re: Formatage commentaire

Posté : 11 mai 2014, 13:46
par wng
Ma fonction _clean() n'est pas là pour supprimer les \s en début et en fin de ligne mais est là pour supprimer les multiples \n et \r possible :)
$regex = "/[\\\]+n/";
Et non pas :
// Edit
$regex = "/^([\\\]+s)+?(.*?)([\\\]+s)+?$/s";

Re: Formatage commentaire

Posté : 11 mai 2014, 16:10
par moogli
c'est aussi ce que fait trim elle n'est pas limité aux espaces (tu peux même lui dire de n'enlever que c'est deux la ;)).

sinon pour ton soucis d'origine tu ne fournit pas d'info sur ce que tu veux exactement donc c'est pas simple de t'aider.

la solution que tu te propose est un poil hasardeuse (dans le sens pas assez restructif) mais si elle répond à ton besoin pourquoi pas.


Si tu considère la sujet résolus pense à cliquer sur le bouton vert a droite du titre stp ;)


@+

Re: Formatage commentaire

Posté : 11 mai 2014, 16:24
par wng
Oui mon problème est résolu, mais comme indiquer plus haut pas de manière propre mais bon tant que cela fonctionne ^^ ...

Mais non trim ne fait pas ce que fait ma fonction _clean() à savoir que trim peut être configurer pour supprimer les \n et \r uniquement oui, mais seulement en début et fin de ligne, hors mon besoin est de supprimer les répétitions dans tous le contenu de mes commentaires pour les formater de manière propre en html.

C'est pour cela que j'ai mis en place ma fonction et que je n'utilise pas trim().