11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Premiers essais avec Ajax pour alimenter des champs.

Tout va bien, sauf si mon champ est un Textarea et contient plusieurs lignes : le InnerHTML=xhr.responseText provoque une erreur sur le saut de ligne. Comment faire pour régler ce problème ?

Mon code PHP :


<?
...
echo (utf8_encode("document.form1.ch_adresse.value=\"".$row_domaine['D_ADRESSE']."\";"));
?>


J'ai essayé du htmlentities, du addslashes..., mais rien n'y fait.

Et côté JS :


eval(xhr.responseText); 


Merci d'avance pour vos réponses

Tonio
Modifié par Tonio (07 Feb 2009 - 07:28)
Il faut que tu echappes les retours à la ligne, avec str_replace par exemple :
<?
...
echo "document.form1.ch_adresse.value=\"".utf8_encode(str_replace('\n', '\\n', $row_domaine['D_ADRESSE']))."\";";
?>

(echo n'est pas vraiment une fonction, mais une commande, c'est pour cela que les parenthèses ne sont pas obligatoires).
Les chaines de caractères ne doivent pas contenir de retours à la ligne comme :
var s = "blah
bleh";

Mais on doit ecrire :
var s = "blah\nbleh";

Sinon ça ne marchera pas, d'où mon code au dessus.
Merci de ta réponse, mais ça ne marche pas.

Cela dit, elle m'a mis sur la piste : il n'y a pas de "\n" dans le texte destiné au TEXTAREA, mais une séquence chr(13).chr(10).

Et si je rajoute un addslashes pour traiter les guillemets, la bonne réponse devient :


echo (utf8_encode("document.form1.ch_adresse.value=\"".str_replace(chr(13).chr(10),"\\n",addslashes($row_domaine['D_ADRESSE']))."\";"));


Et comme ça, ça marche.

Merci