Notice: Undefined index: position in /home/piregwan/public_html/forum2/reponses2.php on line 50
Piregwan 2000



  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

@+

sylozof (jouet en plastok lvl 1 - )
42 ans (Sélestat)
syl82@laposte.net | 148310108

Autant l'hiver éclate que l'hétéroclyte
Eric et Ramzy





  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.

Per (squatteur de topic - )
39 ans (Plage de Pors-Carn)
per2censured@aol.com
http://www.ebodyboard.online.fr

L'alcool est mon pire ennemi.
Fuir l'ennemi est lâche.





  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

sylozof (jouet en plastok lvl 1 - )
42 ans (Sélestat)
syl82@laposte.net | 148310108

Autant l'hiver éclate que l'hétéroclyte
Eric et Ramzy





  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.

Per (squatteur de topic - )
39 ans (Plage de Pors-Carn)
per2censured@aol.com
http://www.ebodyboard.online.fr

L'alcool est mon pire ennemi.
Fuir l'ennemi est lâche.





  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 ?

sylozof (jouet en plastok lvl 1 - )
42 ans (Sélestat)
syl82@laposte.net | 148310108

Autant l'hiver éclate que l'hétéroclyte
Eric et Ramzy





  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.

Per (squatteur de topic - )
39 ans (Plage de Pors-Carn)
per2censured@aol.com
http://www.ebodyboard.online.fr

L'alcool est mon pire ennemi.
Fuir l'ennemi est lâche.





  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

sylozof (jouet en plastok lvl 1 - )
42 ans (Sélestat)
syl82@laposte.net | 148310108

Autant l'hiver éclate que l'hétéroclyte
Eric et Ramzy





  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.
@ +

benzor (admin fanatique lvl 1 - )
46 ans (Chambéry)
ben@piregwan.com
http://www.benzor.com

On a toujours tort d'essayer d'avoir raison devant des gens qui ont toutes les bonnes raisons de croire qu'ils n'ont pas tort. Coluche





  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 @+

sylozof (jouet en plastok lvl 1 - )
42 ans (Sélestat)
syl82@laposte.net | 148310108

Autant l'hiver éclate que l'hétéroclyte
Eric et Ramzy





  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.. [edit]

benzor (admin fanatique lvl 1 - )
46 ans (Chambéry)
ben@piregwan.com
http://www.benzor.com

On a toujours tort d'essayer d'avoir raison devant des gens qui ont toutes les bonnes raisons de croire qu'ils n'ont pas tort. Coluche





  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 !!!

sylozof (jouet en plastok lvl 1 - )
42 ans (Sélestat)
syl82@laposte.net | 148310108

Autant l'hiver éclate que l'hétéroclyte
Eric et Ramzy


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 en face de son intervention. Enfin si vous voulez inviter quelqu'un à réagir, utilisez les appeaux ci-dessous. Seuls les membres logués peuvent utiliser les appeaux et seuls les membres actifs peuvent être appeautés ^^. Bonne notification !

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.