Problème retour chariot

WRInaute occasionnel
Bonjour à tous,

j'ai un petit problème avec les retour chariots. J'ai du texte stocké dans un champ d'une table Mysql, ex (notez le retour à la ligne) :

Code:
Ceci est un test,
avec retour à la ligne

Quand je recupere cette string en php (string à passer en paramètre dans une fonction JS), cela me donne cela dans le code source :

Code:
<a href="..." onclick="javascript:ma_function('Ceci est un test
avec retour à la ligne');

Alors que je voudrais çà :
Code:
<a href="..." onclick="javascript:ma_function('Ceci est un test avec retour à la ligne');

Le code JS n'est pas executé car il y va à la ligne après le mot "test", même en utilisant la fonction nl2br()... Quelqu'un à une petite idée (ça doit être un truc tout con mais je n'ai pas trouvé) ?

Merci


:?:
 
WRInaute passionné
Tu peux faire quelque chose comme ça pour traiter le contenu de ton champ :

Code:
$tonchamp=str_replace("\r\n"," ",$tonchamp);

Attention, si ce sont des utilisateurs qui saisissent le contenu du champ car là je prend en compte le retour chariot uniquement avec windows.

Saur erreur, il s'agit uniquement de "\r"avec Mac et de "\n" avec linux.
 
WRInaute accro
Bonjour,
Il me semble que le \n n'est pas interprété nativement pas php et mysql dès lors tu peux également supprimer la fonction du code qui l'interprète.
 
WRInaute accro
Bonjour,
Je m'explique alors, quand je fais un bête textarea qui envoie des infos vers mysql, si je fais un retour à la ligne dans le texte il est bien affiché ainsi que tel dans la BDD toutefois quand je fais un appel php et un affichage il est collé, pour activer le retour à la ligne dans l'affichage je dois rajouter ereg_replace("\n","<br/>" avant le echo peut-être y a-t-il dans le code de link182 une fonction similaire qu'il suffit alors d'enlever.
Mais bon c'est surement une connerie.
@+
 
WRInaute discret
Tu mélanges deux choses, les retours à la ligne "textes", et les retours à la ligne "html".

Dans un texte les retours à la ligne sont à base de \n, \r, \r\n selon le système d'exploitation. Mais un retour à la ligne en html est écrit ainsi <br>

Et vu qu'il utilise ça dans du javascript, on parle bien de retours à la ligne "textes" et non de retour à la ligne "html".
 
WRInaute occasionnel
merci, ça marche bien pour
Code:
$tonchamp=str_replace(array("\r", "\n")," ",$tonchamp);

Par contre pour transformer un " en \", j'ai essayé ceci :
Code:
$tonchamp=str_replace("\"", "\\"", ,$tonchamp);

et ça ne semble pas marche, il doit y avoir un problème de double quote quelque part ...
 
WRInaute occasionnel
merci à toi oxman, j'avais déja essayé mais cela ne marche pas.
Pour être plus clair, c'est un système de citation (forum) que j'essaye de faire. quand on clique sur "citer", cela doit copier le texte dans le textarea.

Pour cela j'utilise ma fonction Javascript suivante :

Code:
function citation(auteur, texte)
{
	document.repondre_msg.message.value+='[quote="'+auteur+'"]'+texte.replace(/\\n/g,'\n')+'[/quote]\n';
document.repondre_msg.message.focus();
}

J'affiche comme ceci le message venu de ma requete :
Code:
echo str_replace(array("\r"),"", str_replace(array("\n"),"\\\\n",($data['message']));

Cela marche bien quand il y un quote, des retour chariots, mais pas des doubles quotes... voila :(
 
WRInaute occasionnel
Oxman, je l'ai rajouté :
Code:
echo str_replace(array("\r"),"", str_replace(array("\n"),"\\\\n",mysql_escape_string($data['message'])));

Mais la double quote fait tout 'buggué'...

j'ai le champs texte suivant stocké dans la bdd :
voici une simple quote '
voici une double quote "

voici ce que cela me donne dans le source HTML

onclick="javascript:citation('nicolas57', 'voici une simple quote \'\r\nvoici une double quote \"');
 
WRInaute discret
Une fois tu veux échapper le ", une fois le '.

Donc, si tu veux échapper le " :
$tonchamp=str_replace('"', '\\"', $tonchamp);
Si tu veux échapper le ' :
$tonchamp=str_replace("'", "\\'", $tonchamp);

Si tu veux échapper les deux, tu mets l'une ligne après l'autre.
 
Discussions similaires
Haut