![]() ![]()
| ![]() 04 07 2002 � 12:02 ![]() | ![]() ![]() ![]() ![]() |
![]() | Je me suis fait un petit parser en PHP qui fait des troncatures. Mais ca foire un peu parce que j'ai mis une troncatures assez petite (17 car) pour que mon guestbook ne soit pas explos� par plus de 17 caracteres 'W' qui se suivent. Le probleme c'est avec les sauts de lignes. Si on tape Return a la fin d'une phrase et qu'on continue son texte sur la ligne suivante, le parser ne prendra pas le saut de ligne comme s�parateur, car j'utilise la fonction explode($chaine, " ") (avec un espace comme s�parateur donc) pour r�cup�rer mes mots dans un tableau. Du coup le dernier mot de la ligne pr�c�dant le Return et le premier mot de la ligne suivant le Return ne feront qu'un, avec le caractere Return entre les deux. exemple : abcde fghijk sera pris comme "abcde[caractere Return]fghijk" et alors on arrive facilement a 17 caracteres avec ce truc et en g�n�ral le mot suivant le Return est tronque en plein milieu... une solution serait, avant de faire un explode, de remplacer chaque return par un return+espace. mais quel caractere return utiliser ? \n ? \n\r ? comment utiliser la fonction str_replace ? j'ai essay� avec str_replace("\n", "\n ", $chaine); mais ca ne change rien... si vous pouviez m'aider... merci @+ | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 12:38 ![]() | ![]() ![]() ![]() ![]() |
![]() | Apr�s le htmlentities, et avant ta troncature tu fais un truc comme �a : $chaine = ereg_replace("\n"," <br> ",$chaine); Chez moi �a marche. | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 13:10 ![]() | ![]() ![]() ![]() ![]() |
![]() | ah mais ca va pas si je fais le htmlentities avant la troncature... imagine l'expression suivante : "j'�tais" elle prend 7 caracteres. Avec les htmlentities ca fait : "j'étais" ce qui fait 19 caracteres, du coup mon expression de 9 caracteres est tronqu�e apres le "a" (parce que je tronque a 17 caracteres) et c'est carr�ment pas bon ! ![]() moi je r�cupere ma chaine dans la base, je fais un stripslashes, puis un explode($chaine, " "), puis les troncatures, puis htmlentities, puis nl2br. donc ca ne r�soud pas mon probleme. Il se peut que je m'y prenne vraiment mal aussi... merci quand meme ![]() | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 13:23 ![]() | ![]() ![]() ![]() ![]() |
![]() | Ah oui, excuse moi, attent, essaye �a : $texte = ereg_replace("\n"," \n ",$texte); $texte = troncature($texte, "30"); // ta fonction troncature $texte = htmlentities($texte); $texte = nl2br($texte); J'ai essay�, �a marche bien. Enfin, je pense. | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 14:28 ![]() | ![]() ![]() ![]() ![]() |
![]() | ben non, ca n'a pas l'air de marcher... ![]() Sous windozs les caracteres return sont en fait des \n\r non ? C'est peut-etre de la que ca foire ? | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 14:58 ![]() | ![]() ![]() ![]() ![]() |
![]() | Essaye en virant le explode et le stripslashes. Pitetre que �a marchera. Sinon, je vois pas... faut attendre que quelqu'un qui gere en php reponde ![]() ![]() Bonne chance. | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 15:06 ![]() | ![]() ![]() ![]() ![]() |
![]() | si je vire le explode et le stripslashes, je ne peux carr�ment plus rien faire ![]() ![]() mais t'inquiete, merci pour ton aide, je vais encore chercher un peu. @+ et merci | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 15:29 ![]() | ![]() ![]() ![]() ![]() |
![]() | tiens je te donne (de t�te mais ca doit �tre � peu pres ca) l'ordre des traitements de ta chaine : $chaine=str_replace("\n", " <br> ", "$chaine"); $tbMots = explode(" ", $chaine); $i=0; while ( $i <count($tbMots)) { if (strlen($mot)> 17)) { //FONCTION D'INSERTION D'ESPACE } } Voilou. dit-moi si c'est ce que tu cherches. @ + | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 15:41 ![]() | ![]() ![]() ![]() ![]() |
![]() | dans l'ordre, je fais : o r�cup�ration de ma chaine : $chaine o stripslashes o explode($chaine, " ") o boucle sur les entr�es du tableau et troncatures �ventuellement (a la fin de chaque it�ration je reconstruis la chaine) o htmlentities o nl2br maintenant ce que je veux c'est ajouter un espace apres chaque retour a la ligne pour �viter le probleme cit� plus haut. Cet ajout se fera entre le stripslashes et le explode. merci @+ | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 16:24 ![]() | ![]() ![]() ![]() ![]() |
![]() | Oups excuses-moi ![]() ben vire ton htmlentities c de la daube, il convertit pleins de trucs inutilement. Tu fais une fonction qui convertit les entit� html et qui rajoute des espaces devant... comme ca t'es pas emmerd�. ex : function Convertir($chaine) { $chaine=str_replace(" <", " <", "$chaine"); $chaine=str_replace("\t", " � � ", "$chaine"); $chaine=str_replace("\r", "", "$chaine"); etc ... Puis tes retours � la ligne : $chaine=str_replace("\n", " <br> ", "$chaine"); $chaine=str_replace(" <br> ", " <br> ", "$chaine"); // mettre espaces autour du <br> return $chaine; } apres tu fais ton traitement de c�sure. [edit] $chaine=str_replace(" <br> ", " <br> ", "$chaine"); // y'a pas d'espaces devant le premier <br> hein.. ![]() ![]() ![]() | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() ![]()
| ![]() 04 07 2002 � 16:35 ![]() | ![]() ![]() ![]() ![]() |
![]() | ah ok d'accord, je comprends mieux. Je ne savais pas que htmlentities c'�tait pas recommand�. Pour les espaces avant <br> je sais que c'est le parser de piregwan qui en rajoute. merci bien !!! ![]() ![]() ![]() | ![]() |
![]() |
|
![]() | ![]() | ![]() |
![]() | Pour r�pondre � ce sujet (et notifier automatiquement son auteur), cliquez sur le bouton REPONDRE A CE SUJET. Si vous voulez en plus avertir de votre r�ponse une personne qui a particip� � ce sujet, cliquez sur le bouton ![]() Vous n'�tes pas membre ou vous n'�tes pas logu�(e) ou les appeaux sont d�sactiv�s dans votre profil. Vous ne pouvez pas utiliser les appeaux. | ![]() |