8792 sujets

Développement web côté serveur, CMS

Bonjour,
Je modifie un site pour qu'il soit valide xhtml... Ce site a une partie admin ou l'on peut modifier les textes. Avant chaque retour chariot était remplaé par un <br>. Maintenant j'ai voulu mettre le text dans des paragraphes et si la secrétaire rajoute des saut (pour faire beau...) je mais des br après le paragraphe. La secrétaire peut aussi mettre des tires (elle est pérformantes Smiley cligne ) genre <h1>son titre </h1>. Dans ce cas je ne doit pas mettre les titre dans des paragraphes... J'ai fait une petite moulinette si dessous et j'aimerai savoir ce que vous en pensez. et si pour le ereg_replace ou str_replace on pouvait avoir des jocker-> pour les titre genre str_replace("<hjocker>",<remplacementjocker>"). Si il n'y a pas de jocker je ferai un tableau avec tout les titre de h1 a h6...
Merci!

// Affiche le texte
		//supression des espaces  et autre en fin de chaîne
		$dispTxt= rtrim("$dispTxt");
		$dispTxt = ereg_replace("</li>\r", "</li>\n", $dispTxt);
		$dispTxt = ereg_replace("</li> \r", "</li>\n", $dispTxt);
		//remplacement des saut des retour chariot par des paragraphes
		$dispTxt = ereg_replace("\r", "\n</p><p>", $dispTxt);
		//remplacement des paragraphes vide par des br
		$dispTxt = ereg_replace("<p>\n\n</p>", "\n<br />\n", $dispTxt);
		//enlever les paragraphes autour des titres
		$dispTxt = ereg_replace("<p>\n<h6>", "\n<h6>", $dispTxt);
		$dispTxt = ereg_replace("</h6>\n</p>", "</h6>\n", $dispTxt);
  		echo ("<p>".$dispTxt."\n");
		//test si la dernière balise est un paragraphe ou un titre
		if(!((strrpos($dispTxt,"</h6>")+5)==strlen($dispTxt))){
		echo "</p>";
		}
J'ai trouvé une fonction >> preg_replace mais par contre j'ai pas encore trouvé comment elle fonctionnne...
Voilà le code tout beau... alors vous en pensez quoi?? En tous cas ça fonctionne et c'est assez très rapide (pas de boucle) pour des textes pas trops long. Il me manque encore une fonction pour le dernier test faudrait un jocker... pour que ça fonctionne avec tout les h...

// Affiche le texte
		//supression des espaces  et autre en fin de chaîne
		$dispTxt= rtrim("$dispTxt");
		$dispTxt = ereg_replace("</li>\r", "</li>\n", $dispTxt);
		$dispTxt = ereg_replace("</li> \r", "</li>\n", $dispTxt);
		//remplacement des saut des retour chariot par des paragraphes
		$dispTxt = ereg_replace("\r", "\n</p><p>", $dispTxt);
		//remplacement des paragraphes vide par des br
		$dispTxt = ereg_replace("<p>\n\n</p>", "\n<br />\n", $dispTxt);
		//enlever les paragraphes autour des titres
		$dispTxt = preg_replace("/<p>\n<h(.+?)>/", "\n<h$1>", $dispTxt);
		$dispTxt = preg_replace("/<\/h(.+?)>\n<\/p>/", "</h$1>\n", $dispTxt);
  		echo ("<p>".$dispTxt."\n");
		//test si la dernière balise est un paragraphe ou un titre
		if(!((strrpos($dispTxt,"</h6>")+5)==strlen($dispTxt))){
		echo "</p>";
		}



Modifié par gagarine (06 Jun 2005 - 14:38)
Voilà LA solution (j'éspère) après déboga...

// Affiche le texte
		//supression des espaces  et autre en fin de chaîne
		$dispTxt= rtrim("$dispTxt");
		$dispTxt = ereg_replace("</li>\r", "</li>\n", $dispTxt);
		$dispTxt = ereg_replace("</li> \r", "</li>\n", $dispTxt);
		//remplacement des saut des retour chariot par des paragraphes
		$dispTxt = ereg_replace("\r", "\n</p><p>", $dispTxt);
		//remplacement des paragraphes vide par des br
		$dispTxt = ereg_replace("<p>\n\n</p>", "\n<br />\n", $dispTxt);
		//enlever les paragraphes autour des titres
		$dispTxt = preg_replace("/<p>\n<h(.+?)>/", "\n<h$1>", $dispTxt);
		$dispTxt = preg_replace("/<\/h(.+?)>\n<\/p>/", "</h$1>\n", $dispTxt);
		//test si la 1ère balise est un paragraphe ou un titre h, un ul
		if(strpos($dispTxt,">")!=3){
		echo '<p>';
		}
  		echo ($dispTxt."\n");
		//test si la dernière balise est un paragraphe ou un titre h, un ul
		if((strrpos($dispTxt,"<")+5)!=strlen($dispTxt)){
		echo '</p>';
		}