j'ai un texte de formualire, que je traite avec un script php. je
souhaite que chaque ligne du texte transformé soit entourée de balises
<p> et </p>. en charchant un peu, j'ai trouvé qu'avec ça, ça marche bien :
$texte = "<p>" .
preg_replace("'([rn])[s]+'","</p>n<p>",$_POST["texte"]) . "</p>";
maintenant, je voudrais que si une balise se trouve sur une ligne (je
mettrai toujours la balise seule sur la ligne, donc la ligne se commence
par < et se finit par > ), il n'y ait pas ce formatage.
j'ai un texte de formualire, que je traite avec un script php. je
souhaite que chaque ligne du texte transformé soit entourée de balises
<p> et </p>. en charchant un peu, j'ai trouvé qu'avec ça, ça marche bien :
$texte = "<p>" .
preg_replace("'([rn])[s]+'","</p>n<p>",$_POST["texte"]) . "</p>";
maintenant, je voudrais que si une balise se trouve sur une ligne (je
mettrai toujours la balise seule sur la ligne, donc la ligne se commence
par < et se finit par > ), il n'y ait pas ce formatage.
j'ai un texte de formualire, que je traite avec un script php. je
souhaite que chaque ligne du texte transformé soit entourée de balises
<p> et </p>. en charchant un peu, j'ai trouvé qu'avec ça, ça marche bien :
$texte = "<p>" .
preg_replace("'([rn])[s]+'","</p>n<p>",$_POST["texte"]) . "</p>";
maintenant, je voudrais que si une balise se trouve sur une ligne (je
mettrai toujours la balise seule sur la ligne, donc la ligne se commence
par < et se finit par > ), il n'y ait pas ce formatage.
$texte = preg_replace("'.*'", "<p>$0</p>", $texte);
(je ne m'occupe pas des r qui ne devraient pas se trouver dans
$_POST)
$texte = preg_replace("'[^n]'", "<p>$0</p>", $texte); [puis plus
loin : ] $texte = preg_replace("'^.*$'m", "<p>$0</p>", $texte);
Tu ne veux traiter que les lignes qui ne commencent pas par '<' ?
Rien de plus simple :
$texte = preg_replace("'^[^<].*$'m", "<p>$0</p>", $texte);
Et tu peux même traiter les cas où la ligne ne commence pas par '<'
mais contient un '<', c'est un caractère de moins :
$texte = preg_replace("'^[^<]*$'m", "<p>$0</p>", $texte);
Enfin, si tu veux en profiter pour virer les espaces de début et de
fin de ligne :
$texte = preg_replace("'^[s]*([^<s]*)[s]*$'m", "<p>$1</p>",
$texte);
Le seul risque, c'est de transformer aussi les lignes vides : je te
laisse remplacer un '*' par un '+' pour éviter cela.
$texte = preg_replace("'.*'", "<p>$0</p>", $texte);
(je ne m'occupe pas des r qui ne devraient pas se trouver dans
$_POST)
$texte = preg_replace("'[^n]'", "<p>$0</p>", $texte); [puis plus
loin : ] $texte = preg_replace("'^.*$'m", "<p>$0</p>", $texte);
Tu ne veux traiter que les lignes qui ne commencent pas par '<' ?
Rien de plus simple :
$texte = preg_replace("'^[^<].*$'m", "<p>$0</p>", $texte);
Et tu peux même traiter les cas où la ligne ne commence pas par '<'
mais contient un '<', c'est un caractère de moins :
$texte = preg_replace("'^[^<]*$'m", "<p>$0</p>", $texte);
Enfin, si tu veux en profiter pour virer les espaces de début et de
fin de ligne :
$texte = preg_replace("'^[s]*([^<s]*)[s]*$'m", "<p>$1</p>",
$texte);
Le seul risque, c'est de transformer aussi les lignes vides : je te
laisse remplacer un '*' par un '+' pour éviter cela.
$texte = preg_replace("'.*'", "<p>$0</p>", $texte);
(je ne m'occupe pas des r qui ne devraient pas se trouver dans
$_POST)
$texte = preg_replace("'[^n]'", "<p>$0</p>", $texte); [puis plus
loin : ] $texte = preg_replace("'^.*$'m", "<p>$0</p>", $texte);
Tu ne veux traiter que les lignes qui ne commencent pas par '<' ?
Rien de plus simple :
$texte = preg_replace("'^[^<].*$'m", "<p>$0</p>", $texte);
Et tu peux même traiter les cas où la ligne ne commence pas par '<'
mais contient un '<', c'est un caractère de moins :
$texte = preg_replace("'^[^<]*$'m", "<p>$0</p>", $texte);
Enfin, si tu veux en profiter pour virer les espaces de début et de
fin de ligne :
$texte = preg_replace("'^[s]*([^<s]*)[s]*$'m", "<p>$1</p>",
$texte);
Le seul risque, c'est de transformer aussi les lignes vides : je te
laisse remplacer un '*' par un '+' pour éviter cela.
ah ouais. après avoir relu trois fois (voire plus en fait) tout le
message, avoir parcouru en diagonale
http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.php, et
compris tous les exemples suivants, je me rends compte qu'en fait le
seul truc que je crois pas avoir déjà vu ailleurs c'est le $0. par
défaut, chaque suite de caractère qui répond au masque se retrouve dans
$0 ?
et les apostrophes, ils servent à qqch ?
(je ne m'occupe pas des r qui ne devraient pas se trouver dans
$_POST)
ouais, c'est ce que je pensais aussi. on les trouve où ces caractères ?
d'ailleurs, ça me fait penser qu'au départ j'avais bêtement essayé
str_replace("n","</p>n<p>",$_POST["texte"]), et ça n'a jamais
fonctionné. est ce que y a une raison ou est ce que c'est moi qui craque ?
$texte = preg_replace("'[^n]'", "<p>$0</p>", $texte); [puis plus
loin : ] $texte = preg_replace("'^.*$'m", "<p>$0</p>", $texte);
ok. mais pourquoi on met une étoile dans le deuxième et pas dans le
premier ?
et "'.*'m", ça marche non ? (mais c'est juste parce que c'est
simple, c'est ça ?)
[...] je suis pas sur d'avoir bien
compris l'intérêt du m, à part que le ^ et le $ ne sont plus des
fin-début de ligne :)
$texte = preg_replace("'^[^<]*$'m", "<p>$0</p>", $texte);
juste pour savoir si j'ai bien compris : ici, le * s'applique à "pas de
<" ?
$texte = preg_replace("'^[s]*([^<s]*)[s]*$'m", "<p>$1</p>",
$texte);
alors ici, le $1 est mis pour la classe du milieu ? le $0 existe
toujours, égal au total de la ligne ?
ah ouais. après avoir relu trois fois (voire plus en fait) tout le
message, avoir parcouru en diagonale
http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.php, et
compris tous les exemples suivants, je me rends compte qu'en fait le
seul truc que je crois pas avoir déjà vu ailleurs c'est le $0. par
défaut, chaque suite de caractère qui répond au masque se retrouve dans
$0 ?
et les apostrophes, ils servent à qqch ?
(je ne m'occupe pas des r qui ne devraient pas se trouver dans
$_POST)
ouais, c'est ce que je pensais aussi. on les trouve où ces caractères ?
d'ailleurs, ça me fait penser qu'au départ j'avais bêtement essayé
str_replace("n","</p>n<p>",$_POST["texte"]), et ça n'a jamais
fonctionné. est ce que y a une raison ou est ce que c'est moi qui craque ?
$texte = preg_replace("'[^n]'", "<p>$0</p>", $texte); [puis plus
loin : ] $texte = preg_replace("'^.*$'m", "<p>$0</p>", $texte);
ok. mais pourquoi on met une étoile dans le deuxième et pas dans le
premier ?
et "'.*'m", ça marche non ? (mais c'est juste parce que c'est
simple, c'est ça ?)
[...] je suis pas sur d'avoir bien
compris l'intérêt du m, à part que le ^ et le $ ne sont plus des
fin-début de ligne :)
$texte = preg_replace("'^[^<]*$'m", "<p>$0</p>", $texte);
juste pour savoir si j'ai bien compris : ici, le * s'applique à "pas de
<" ?
$texte = preg_replace("'^[s]*([^<s]*)[s]*$'m", "<p>$1</p>",
$texte);
alors ici, le $1 est mis pour la classe du milieu ? le $0 existe
toujours, égal au total de la ligne ?
ah ouais. après avoir relu trois fois (voire plus en fait) tout le
message, avoir parcouru en diagonale
http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.php, et
compris tous les exemples suivants, je me rends compte qu'en fait le
seul truc que je crois pas avoir déjà vu ailleurs c'est le $0. par
défaut, chaque suite de caractère qui répond au masque se retrouve dans
$0 ?
et les apostrophes, ils servent à qqch ?
(je ne m'occupe pas des r qui ne devraient pas se trouver dans
$_POST)
ouais, c'est ce que je pensais aussi. on les trouve où ces caractères ?
d'ailleurs, ça me fait penser qu'au départ j'avais bêtement essayé
str_replace("n","</p>n<p>",$_POST["texte"]), et ça n'a jamais
fonctionné. est ce que y a une raison ou est ce que c'est moi qui craque ?
$texte = preg_replace("'[^n]'", "<p>$0</p>", $texte); [puis plus
loin : ] $texte = preg_replace("'^.*$'m", "<p>$0</p>", $texte);
ok. mais pourquoi on met une étoile dans le deuxième et pas dans le
premier ?
et "'.*'m", ça marche non ? (mais c'est juste parce que c'est
simple, c'est ça ?)
[...] je suis pas sur d'avoir bien
compris l'intérêt du m, à part que le ^ et le $ ne sont plus des
fin-début de ligne :)
$texte = preg_replace("'^[^<]*$'m", "<p>$0</p>", $texte);
juste pour savoir si j'ai bien compris : ici, le * s'applique à "pas de
<" ?
$texte = preg_replace("'^[s]*([^<s]*)[s]*$'m", "<p>$1</p>",
$texte);
alors ici, le $1 est mis pour la classe du milieu ? le $0 existe
toujours, égal au total de la ligne ?
d'ailleurs, ça me fait penser qu'au départ j'avais bêtement essayé
str_replace("n","</p>n<p>",$_POST["texte"]), et ça n'a jamais
fonctionné. est ce que y a une raison ou est ce que c'est moi qui craque ?
Je ne vois pas pourquoi ça n'aurait pas fonctionné. La doc de
str_replace contient l'exemple suivant :
Encore une fois je n'ai pas testé, donc essaye et tu nous diras.
Oui, et oui. RTFM. ;-)
d'ailleurs, ça me fait penser qu'au départ j'avais bêtement essayé
str_replace("n","</p>n<p>",$_POST["texte"]), et ça n'a jamais
fonctionné. est ce que y a une raison ou est ce que c'est moi qui craque ?
Je ne vois pas pourquoi ça n'aurait pas fonctionné. La doc de
str_replace contient l'exemple suivant :
Encore une fois je n'ai pas testé, donc essaye et tu nous diras.
Oui, et oui. RTFM. ;-)
d'ailleurs, ça me fait penser qu'au départ j'avais bêtement essayé
str_replace("n","</p>n<p>",$_POST["texte"]), et ça n'a jamais
fonctionné. est ce que y a une raison ou est ce que c'est moi qui craque ?
Je ne vois pas pourquoi ça n'aurait pas fonctionné. La doc de
str_replace contient l'exemple suivant :
Encore une fois je n'ai pas testé, donc essaye et tu nous diras.
Oui, et oui. RTFM. ;-)
[...] "'^[^<].+$'m"
bon, sinon, j'ai un dernier petit problème : je me retrouve quand je
rentre ffffffffffffffffn avec en sortie <p>ffffffffffffffffn</p>n :
quand je rentre qch avec un retour à la ligne, je me retrouve avec, dans
mon source html, un retour à la ligne dont je ne veux pas avant </p>.
je ne sais pas trop comment l'enlever...
[...] "'^[^<].+$'m"
bon, sinon, j'ai un dernier petit problème : je me retrouve quand je
rentre ffffffffffffffffn avec en sortie <p>ffffffffffffffffn</p>n :
quand je rentre qch avec un retour à la ligne, je me retrouve avec, dans
mon source html, un retour à la ligne dont je ne veux pas avant </p>.
je ne sais pas trop comment l'enlever...
[...] "'^[^<].+$'m"
bon, sinon, j'ai un dernier petit problème : je me retrouve quand je
rentre ffffffffffffffffn avec en sortie <p>ffffffffffffffffn</p>n :
quand je rentre qch avec un retour à la ligne, je me retrouve avec, dans
mon source html, un retour à la ligne dont je ne veux pas avant </p>.
je ne sais pas trop comment l'enlever...
quand je rentre qch avec un retour à la ligne, je me retrouve avec, dans
mon source html, un retour à la ligne dont je ne veux pas avant </p>.
C'est bizarre. Cela peut être soit un bug de PHP lui-même, soit un bug
de la doc. Par exemple, la doc de l'option D est fausse en français (en
tout cas l'explication française ne veut rien dire, alors que cela
semble clair en anglais).
quand je rentre qch avec un retour à la ligne, je me retrouve avec, dans
mon source html, un retour à la ligne dont je ne veux pas avant </p>.
C'est bizarre. Cela peut être soit un bug de PHP lui-même, soit un bug
de la doc. Par exemple, la doc de l'option D est fausse en français (en
tout cas l'explication française ne veut rien dire, alors que cela
semble clair en anglais).
quand je rentre qch avec un retour à la ligne, je me retrouve avec, dans
mon source html, un retour à la ligne dont je ne veux pas avant </p>.
C'est bizarre. Cela peut être soit un bug de PHP lui-même, soit un bug
de la doc. Par exemple, la doc de l'option D est fausse en français (en
tout cas l'explication française ne veut rien dire, alors que cela
semble clair en anglais).