Page 1 sur 1

textarea et espcace

Posté : 02 nov. 2007, 23:47
par phi3001
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

Posté : 02 nov. 2007, 23:55
par h0_noMan
Essayes en remplacant les espaces par des  
echo str_replace(' ',' ',$message);

Posté : 03 nov. 2007, 00:07
par phi3001
super merci

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

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

Posté : 03 nov. 2007, 00:32
par h0_noMan
echo  str_replace(' ',' ',nl2br(stripslashes(htmlentities($message)))); 

Posté : 03 nov. 2007, 00:41
par phi3001
oups

là, la fonction nl2br ne marche pas

tout les caracteres se suivent


merci encore

Posté : 03 nov. 2007, 01:23
par h0_noMan
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);

Posté : 03 nov. 2007, 01:30
par Ryle
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 :))

Posté : 03 nov. 2007, 01:42
par h0_noMan
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é.

Posté : 03 nov. 2007, 01:47
par Ryle
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 :)