8791 sujets

Développement web côté serveur, CMS

Salut,

J'ai toujours un gros probleme mental avec les types d'encodage de caracteres, les sauts de lignes, tout ce qui a trait aux fonctions htmlspecialchars(), nl2br(), etc.

La, j'ai un bete <textarea> dont le contenu va dans un champ mySQL type TEXT. Si mon contenu contient des retours a la ligne, au moment d'afficher mon champ mySQL ces sauts de ligne ne sont plus visibles :

1
2
3

.. devient :

1 2 3

Pourquoi Dieu pourquoi Smiley decu
Utilises-tu la fonction nl2br() pour l'affichage de ton texte ?

Sinon je ne sais plus si l'enregistrement en base de donnée conserve bien les "/n/r", à tester. Le cas contraire le plus simple est peut-être d'appliquer la fonction nl2br() avant enregistrement en BDD.
Il ne faut pas que tu applique la fonction htmlspecialchars() après nl2br(), mais l'inverse Smiley smile
Ca marche now! Toutefois j'ai un autre problème un peu différent mais affectant le meme <textarea> :

Ce <textarea> apparait (par un appel Ajax avec la fonction jQuery load() ) quand l'utilisateur click sur un certain DIV contenant du texte.

Le texte du DIV disparait donc et cede sa place a un <textarea> contenant le meme texte, que l'utilisateur peut maintenant editer. J'ai voulu imiter Facebook qui fait cela avec la section "write something about yourself".

Probleme : au lieu de contenir simplement

1
2

ou meme

1<br />
2

dans mon <textarea>, j'ai :

1<br />
2

[EDIT : bon ca passe pas sur ce forum mais avant le 1 j'ai mis plein d'espaces qui decalent nettement le 1 vers la droite]

C'est-a-dire, dans mon champ mySQL avant le 1 j'ai plein d'espaces (on dirait en fait des TAB, j'en compte six ou sept), et pareil apres le 2.

Je n'ai pas la moindre idee d'ou sortent ces espaces ou ces TABS ...
Modifié par apericube (09 Nov 2010 - 19:57)
Ce sont certainement les tabulations que tu as placés entre la balise ouvrante et la balise fermante de ton textarea pour l'indentation de ton code HTML.
Pour commencer, utilises une fonction inverse de nl2br() pour convertir les <br /> en saut de ligne dans ton textarea :


<?php
function br2nl($text){
	// forme xhtml :
	$text = str_replace("<br />","",$text);
	// forme classique
	$text = str_replace("<br>","",$text);
	// retour :
	return $text;
 	}
?>

Pour les espaces non désirés, je ne vois pas, tu ne donnes pas assez d'infos pour qu'on puisse voir d'où ça viendrait. Au pire, tu peux toujours te faire une fonction pour les supprimer.
zounousnous : ok mais en fait c'est ni des retour a la ligne ni des espaces en fait, c'est des tabulations \o/

Comment supprime t-on des tabulations ?