Garder les espaces en début de ligne

Dookie
Invité n'ayant pas de compte PHPfrance

14 oct. 2006, 21:59

Bonjour, je débute en php, et j'ai besoin d'un peu d'aide :
Alors voilà, je récupère un longText de ma base de donnée et je veux l'afficher, le problème vient du fait que s'il y a des espaces en début de ligne, ils sont effacés lors de l'affichage.
Si le commentaire dans ma bdd est (les _ sont des espaces) :
"____Bonjour,
____moi ça va"
Cela m'affichera sur ma page ( avec un echo nl2br($val["comment"]) :
"Bonjour,
moi ça va"

Or moi je veux les garder, ces espaces >.<
(la fonction nl2br insère <br/> devant toutes les nouvelles lignes, sinon tout s'affiche sur une seule ligne).

Alors je ne vois pas comment faire, un str_replace(" ","&nbsp;",$val["comment"]) remplacera tout les espaces par des espaces insécables, donc effectivement ceux en début de ligne apparaissent bien, mais du coup il n'y a plus de retour à la ligne automatique ^-^"

J'utiliserais bien preg_replace, mais je ne sais pas vraiment m'en servir, dois-je chercher /n ou /r pour le retour à la ligne, et comment dire qu'il faut remplacer chacun des espaces par un &nbsp; et non pas tous par un seul ?
Ou y a t'il une méthode plus facile ?

Merci d'avance à quiconque peut me donner un coup de main.

Invité
Invité n'ayant pas de compte PHPfrance

15 oct. 2006, 07:47

Salut,

Ca va te servir à quoi d'avoir des espaces en début de chaine ?

J'ai eu un problème similaire à part que moi je faisais un trim() sur la variable post avant de l'enregistrer dans ma bdd, et vu que mes smilies était de la forme " :) " tous ceux qui était en début et en fin de message n'étaient pas parser par mon str_replace(), je n'ai pas eu d'autre choix que de rajouter un espace en début et fin du message à l'affichage.

C'est peut-être une solution ?

ViPHP
ViPHP | 1961 Messages

15 oct. 2006, 14:53

Bonjour,

Et en utilisant tout simplement la balise (X)HTML <pre></pre> comme ceci

Code : Tout sélectionner

<pre> <?php echo nl2br($a); ?> </pre>
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Dookie
Invité n'ayant pas de compte PHPfrance

15 oct. 2006, 22:44

En fait je pense que je vais simplement faire un str_replace d'un caractère particulier en &nbsp; et ça fera très bien l'affaire. :)

En ce qui concerne la balise <pre></pre> ça ne m'intéresse pas car ça garde vraiment exactement le message comme il a été écrit, cad qu'il n'y même plus les retours automatiques à la ligne ^-^"

Je trouvais ça juste dommage de supprimer les espaces en début de ligne, on ne peut pas faire de petits dessins ou du texte 'organisé'.

Enfin bon, merci quand même pour l'aide ;)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 oct. 2006, 22:45

C'est résolu ?

Mammouth du PHP | 601 Messages

15 oct. 2006, 22:47

tu peux mettre les entité html tout simplement
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

ViPHP
ViPHP | 1961 Messages

15 oct. 2006, 22:50

Re,

Je crois que tu n'as pas essayé ce que je t'ai dis, j'ai fait des essais et ça fait exactement ce que tu veux. cad: conservation des espaces là où ils sont et remplace les retours chariot par des <br /> pour le saut de ligne à l'affichage du navigateur.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Dookie
Invité n'ayant pas de compte PHPfrance

16 oct. 2006, 19:54

Je crois que tu n'as pas essayé ce que je t'ai dis, j'ai fait des essais et ça fait exactement ce que tu veux. cad: conservation des espaces là où ils sont et remplace les retours chariot par des <br /> pour le saut de ligne à l'affichage du navigateur.
Si, si, j'ai essayé, cela résoud le problème mais en crée un autre : avec ses balises il n'y a plus de retour automatique à la ligne, les seuls retours à la ligne sont les retours chariot de l'utilisateur. Donc là si ma phrase était entouré de la balise <pre>, tout mon petit paragraphe serait écrit sur une seule ligne, avec une barre de défillement pour voir ce qui dépasse de l'écran.

Comme ce n'est pas d'une importance vitale, vous vous imaginez bien :p , je reste sur ma solution qui est de remplacer un caractère peu usité par des $nbsp
Je pensais qu'il y avait quelque chose tout bête pour le faire, mais en fait j'ai l'air de m'être trompé, donc je ne veux pas insister ^-^"