textarea et espcace

Eléphanteau du PHP | 37 Messages

02 nov. 2007, 23:47

j'ai un formulaire textarea

j'aimerai conserver les espaces que l'utilisateur pourrait faire.

exemple : si l'utilisateur en debut de 1 ere ligne decide de faire 10 espaces et sur la 2nd ligne n'en faire aucun, je veux garder cette mise en forme.
en fait il faudrait considere les espaces comme des caracteres.

voici le code qui traite ma variable $message
echo  nl2br(stripslashes(htmlentities($message)));
merci d'avance

Eléphant du PHP | 445 Messages

02 nov. 2007, 23:55

Essayes en remplacant les espaces par des  
echo str_replace(' ',' ',$message);

Eléphanteau du PHP | 37 Messages

03 nov. 2007, 00:07

super merci

par contre j'arrive a mettre les 2 codes en 1 ?

echo str_replace(' ',' ',$message);
echo  nl2br(stripslashes(htmlentities($message)));

Eléphant du PHP | 445 Messages

03 nov. 2007, 00:32

echo  str_replace(' ',' ',nl2br(stripslashes(htmlentities($message)))); 

Eléphanteau du PHP | 37 Messages

03 nov. 2007, 00:41

oups

là, la fonction nl2br ne marche pas

tout les caracteres se suivent


merci encore

Eléphant du PHP | 445 Messages

03 nov. 2007, 01:23

Tu pourrais tout mettre dans une seule fonction.

Code : Tout sélectionner

nl2br() remplace : \n -> \n<br /> stripslashes() remplace : \' -> ' \\ -> \ htmlentities() remplace : & -> & < -> < > -> > ' -> &apos; " -> "
$replace = array('\n'      ,'\r','  '     ,'&'    ,'<'   ,'>'   ,'\''    ,'"'     ,'\\\'','\\\\');
$by      = array('\n<br />',''  ,' &nbsp;','&','<','>','&apos;','"','\''  ,'\\'  );
echo str_replace($replace,$by,$message);
Modifié en dernier par h0_noMan le 03 nov. 2007, 01:39, modifié 4 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 nov. 2007, 01:30

Juste une remarque en passant... c'est pas forcément judicieux de remplacer tous les espaces de "l'utilisateur" par un espace non sécable (nbsp). En effet, s'il n'y a pas de tirer ou de retour à la ligne dans la saisie d'un paragraphe, tu vas obtenir une seule ligne de quelques kilomètres de long, que le navigateur ne saura pas où couper.

Je te recommande donc cette transformation uniquement s'il y a deux espaces contigues (ou plus, le résultat sera le même) : str_replace(' ', ' &nbsp;', $chaine); Ainsi s'il y a deux espaces cote à cote, seul le second est remplacé et si nécessaire, le navigateur peut couper la chaine et ajouter un retour à la ligne sur le premier ;)

A noter par ailleurs que nl2br() ne remplace rien, et se contente d'ajouter un <br /> quand il trouve un retour à la ligne (ça peut être utile de le savoir :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 445 Messages

03 nov. 2007, 01:42

A noter par ailleurs que nl2br() ne remplace rien, et se contente d'ajouter un <br /> quand il trouve un retour à la ligne (ça peut être utile de le savoir :))
Je prends note, mais en meme temps ca ne changera que dans son code source.
Je te recommande donc cette transformation uniquement s'il y a deux espaces contigues (ou plus, le résultat sera le même) : str_replace(' ', ' &nbsp;', $chaine); Ainsi s'il y a deux espaces cote à cote, seul le second est remplacé et si nécessaire, le navigateur peut couper la chaine et ajouter un retour à la ligne sur le premier ;)
Merci du conseil.
Code rectifié.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 nov. 2007, 01:47

Je prends note, mais en meme temps ca ne changera que dans son code source.
Dans ce cas oui, mais il est bon de savoir que les \r\n ou \n sont conservés. Tu pourrais par exemple faire un striptags() pour virer les <br /> tout en conservant les retours à la ligne ou même appeller 2 fois la fonction nl2br() pour doubler tous les retours à la ligne (chose que tu n'aurais pu faire s'il y avait eu remplacement).

Donc c'est vrai qu'ici ca change rien, c'était plus pour info :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...