1

Yop,

En voulant tester quelques trucs en ajax, je suis rapidement tombé sur un point qui me semble très curieux. Voilà un code tout con, qui affiche une page contenant un champ texte et deux boutons pour envoyer sa valeur via une requête "normale" (utilisant un bouton submit dans un formulaire) ou via une requête Ajax. La valeur ainsi récupérée est inscrite dans un fichier "out.txt". La page est encodée en UTF-8 :

http://www.mirari.fr/BEYd

Si j'utilise le bouton "submit", aucun problème : je récupère ma valeur encodée en UTF-8 dans mon fichier "out.txt", ce qui est logique compte tenu de l'encodage de la page. En revanche, si j'utilise la requête Ajax, je récupère bien ma valeur dans "out.txt" mais encodée en ISO-8859-1. D'où plusieurs questions :

- Pourquoi ISO-8859-1 ? D'après spipu, ça pourrait être en fonction de l'encodage par défaut du navigateur
- Si c'est le cas, alors je vois difficilement comment résoudre le problème de façon propre, puisque ça voudrait dire que l'encodage de la requête est indéterminé (il dépend de la configuration de l'utilisateur)

Quelqu'un s'est déjà penché sur ce problème ?



[edit] cf post ./19

Nouveau fichier plus pratique pour tester : http://www.mirari.fr/wuOP
Résultats en image : form vs ajax



[edit] problème résolu, cf post ./23
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

Quel est le navigateur en question ?
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

3

Ah oui effectivement j'ai oublié cette précision : j'ai testé avec IE6, IE7, Fx2 et Fx3 (le tout sous Windows)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

Zephyr (./1) :
D'après spipu, ça pourrait être en fonction de l'encodage par défaut du navigateur


je voulais dire "l'encodage par défaut de l'OS" (mais j'étais pas très clair hier soir happy)
Ancien pseudo : lolo

5

dans ton exemple, pourquoi tu blackslash les ' dans ton onclick ?

<input onclick="XMLHttp.request(\'test.php\', {text : document.getElementById (\'text\').value}, {});" type="button" value="Ajax Send" />

y a pas besoin normalement, non ?
Ancien pseudo : lolo

6

heu oui ils sont inutiles (le contenu de la page était affiché avec un "echo" avant, du coup j'avais backslashé les '), j'ai simplement oublié de les retirer mais ça n'empêche pas le code de fonctionner ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

7

j'ai voulu essayer sur mon serveur, au cas ou, ca puisse dépendre de ta config, meme résultat : http://dev.spipu.net/ajax/

<?php
$file = './out.txt';

if (isset($_POST['text']))
{
	$f = fopen($file, 'w');
	fwrite ($f, substr($_POST['text'], 0, 255));
	fclose ($f);
	header('location: ./');
	exit;
}
$contenu = (is_file($file) ? file_get_contents($file) : '');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="application/xhtml+xml;charset=UTF-8" />
		<script src="http://www.mirari.fr/template/pearl/inc/ajax.js" type="text/javascript"></script>
		<title>Test</title>
	</head>
	<body>
		<form action="" method="post">
			<input id="text" name="text" type="text"  maxlength="255" value="" />
			 - <input type="submit" value="Form Send"/>
			 - <input onclick="XMLHttp.request('./index.php', {text : document.getElementById ('text').value}, {});" type="button" value="Ajax Send" />
			 - <input onclick="window.location.href='./';" type="button" value="Recharger la page" />
		</form>
		
		contenu du fichier <a href="<?php echo $file; ?>" target="_blank"><?php echo $file; ?></a> :<br />
		<div style="border: solid 1px #000000; color: #222222; background: #EEEEEE; width: 200px; height: 200px; overflow: scroll"><pre><?php echo $contenu; ?></pre></div>
	</body>
</html>
Ancien pseudo : lolo

8

heuuuuuuuuuuuuuuu

dans ton fichier ajax.js, dans la fonction proceed :

XMLHttp.handle.setRequestHeader ('Content-Type','application/x-www-form-urlencoded; charset=iso-8859-1');

t'as essayé de mettre en utf8 ?
Ancien pseudo : lolo

9

"oops", je teste, il me semble qu'à l'époque j'avais essayé de changer ça mais je retente pour en avoir le coeur net grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

10

J'ai voulu tester sur mon serveur, résultat, form send marche, ajax send nan triso
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

11

à cause des \', tu les a remplacé par ' ?
Ancien pseudo : lolo

12

Non ça doit etre plus con comme pbm mais flemme cheeky
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

13

bon, j'ai remplacé le charset du setRequestHeader par utf-8 et j'ai viré les \ : aucun changement, le fichier est toujours en iso en sortie :/

./10 : c'est parceque la requête ajax est faite sur un fichier "test.php" qui n'existe pas (il faut remplacer par "ajax.php")
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

14

p###, j'ai voulu modifier la config de mon pc pour faire des tests, il a complètement planté, obligé de rebooter.... merci zeph.... wink
Ancien pseudo : lolo

15

dsl grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

16

ton fichier text.php ... t'as testé de rajouter

header("Content-Type:text/html; charset=UTF-8");

?
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)

17

./13 nan j'avais changé le nom du fichier, c'etait bien les backslashage qui faisait foirer ^^

Sinon j'ai testé aussi utf-8 (apache/safari) meme resultat :/
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

18

<?php
header("Content-Type:text/html; charset=UTF-8"); 

$f = fopen ('/tmp/out.txt', 'w');

foreach ($_POST as $key => $val)
    fwrite ($f, "$key => $val\n");

fclose ($f);

?>

[...]
		XMLHttp.handle.open ('POST', request.url.replace (/&amp;/, '&'), true);
			XMLHttp.handle.setRequestHeader ('Content-Type','application/x-www-form-urlencoded; charset=utf-8');

[...]
        
            <input onclick="XMLHttp.request('testbob.php', {text : document.getElementById ('text').value}, {}); alert('Envoyé!');" type="button" value="Ajax Send" />
        </form>
    </body>
</html>


(j'envoi du japonais ( 6月15日は父の日。恥ずかしかったり、 ) pour etre sur que ça soit de l'unicode comme caracteres)

j'ai bien de l'ASCII Text pour out.txt via ajax...

edit: marrant parceque en tapant "ajax UTF8" dans google :

http://www.webrankinfo.com/forums/viewtopic_47258.htm
L'AJAX envoie TOUJOURS les données encodées en UTF8!!!


Alors qu'on dirais pas :/

(enfin dans le fichier out.txt j'ai :
text => 6%u670815%u65E5%u306F%u7236%u306E%u65E5%u3002%u6065%u305A%u304B%u3057%u304B%u3063%u305F%u308A%u3001 donc il est escapé...)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

19

./16 : aucun changement :/

bon c'est plus pratique de tester avec ce fichier-là : http://www.mirari.fr/wuOP (et j'ai fixé le charset à 'utf-8' dans le JS de mirari auquel il fait référence)

résultat : form vs ajax
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

20

J'ai l'impression que ça a l'air galere..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

21

essaye ca :

<script type="text/javascript">
<!--
	document.write(document.defaultCharset);
-->
</script>


alors que la page est en UTF8, il m'affiche windows-1252 ?! (ne marche que sous IE)
Ancien pseudo : lolo

22

pareil, undefined sous Fx et windows-1252 sous IE, mais est-ce que ça a vraiment une importance au niveau d'ajax ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

23

je crois que ca marche : http://dev.spipu.net/ajax/test2.php

<?php
	header ("Content-Type:text/html; charset=UTF-8");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="application/xhtml+xml;charset=UTF-8" />
        <script src="./ajax.js" type="text/javascript"></script>
        <title>Test 2</title>
    </head>
    <body>
        <form action="" method="post">
            <input id="text" name="text" type="text" />
            <input type="submit" value="Form Send" />
            <input onclick="XMLHttp.request('test2.php', {text : encodeURI(document.getElementById ('text').value)}, {action : 'extract', from : 'result', to : 'result'});" type="button" value="Ajax Send" />
        </form>
        <div id="result">
<?php
	foreach ($_POST as $key => $val)
	{
		$val = urldecode($val);
		echo "$key =&gt; $val<br />\n";
	}
?>
        </div>
    </body>
</html>


avec
XMLHttp.handle.setRequestHeader ('Content-Type','application/x-www-form-urlencoded; charset=utf-8');

dans ajax.js
Ancien pseudo : lolo

24

yep je viens de tomber sur la réponse grâce à google : les fonctions escape et unescape de JavaScript produisent forcément de l'iso >_<

encodeURI et decodeURI marchent quel que soit le charset ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

25

apparemment oui smile à tester/confirmer
Ancien pseudo : lolo

26

bon nikel, finalement ce sont encodeURIComponent et decodeURIComponent qui sont adaptées (encodeURI et decodeURI ne touchent pas aux caractères spéciaux des urls, genre ?, = & co), mais ça a l'air d'être bon.

mci happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

27

attention je crois que encoreURI ne marche pas avec Fx...
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

28

Fx2 alors ? parceque là j'ai le 3 et ça marche (et ça me ferait bien chier que ça ne fonctionne pas avec Fx2, faudrait recoder une fonction encodeURI toute crade en JS ^^)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

29

j'ai testé sous FF2, ca marche nikel
Ancien pseudo : lolo

30

Apres je sais pas ce qu'a fait le gars mais j'ai vu ça la :

http://www.servoy.jp/blogen/?p=60
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.