0

Ajax 経由でデータを送信しようとしていますUTF-8が、一部のデータが変更されていunicodeます。2 つの短い例で説明します。

シンプルな POST (ajax なし)

<form accept-charset="UTF-8" method="POST" action="test2.php">
<input type="text" class="" name="text">
<input type="submit" class="button" value="Submit">
</form>

メタおよび PHP ヘッダーは常に設定されます。

<meta charset="utf-8">

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

アラビア文字 ( ب) を送信し、使用strlen()すると 3 が返されます。使用mb_strlen()すると 1 が返されます。これで問題ありません。

今Ajaxのバージョン。フォーム、ヘッダー、およびメタは同じです。しかし、onsubmit() は Javascript でこの ajax を呼び出します。

... (initiating HttpReq)
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader("charset", "utf-8");
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
...
if (self.xmlHttpReq.readyState == 4) { ... }

同じテストでstrlen()6 と 6が得られmb_strlen()ます。この ب は、実際には Ajax プロセスのどこかに変換されました。これは、通常の(例 1)6%u0628では発生しません。POST

Ajax プロセスで忘れている/間違っていることは何ですか?

4

1 に答える 1

1

私はたくさんの ajax を使用し、常に utf8 のみを使用し、問題はありませんでした。私は主に chrome と safari ios を使用しています。

おそらく、すべてのヘッダーを削除して ajax スクリプトを変更してみてくださいFormData

document.forms[0]ページの最初のフォームからすべてのフィールドを取得することを意味します。それ以外の場合は、ID を指定して呼び出します。document.getElementById('myform') これももう使用しませんreadyState...onload

postresponsefunction u write で応答を返すthis.response

var fd=new FormData(document.forms[0]),
c=new XMLHttpRequest();
c.open('POST',strURL);
c.onload=postresponsefunction;
c.send(fd);

これは、投稿と ajax ファイルを含む完全に機能する php スクリプトで、名前は「test.php」です。

<?php
if($_REQUEST){
print_r($_REQUEST);
}else{
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>postajax</title>
<script>
var 
rf=function(){
 document.getElementsByTagName('div')[0].innerText=this.response;
},
sf=function(e){
 e.preventDefault();e.stopPropagation();
 var fd=new FormData(document.getElementsByTagName('form')[0]),
 c=new XMLHttpRequest();
 c.open('POST','test.php');
 c.onload=rf;
 c.send(fd);
};
window.onload=function(){
 document.getElementsByTagName('form')[0].onsubmit=sf;
}
</script>
</head>
<body>
<form>
<input type="text" name="mytext"><input type="submit" value="submit">
</form><div></div>
</body>
</html>
<?php
}
?>

すなわち

if (!window.XMLHttpRequest) {
  window.XMLHttpRequest = function() {
    return new ActiveXObject(”Microsoft.XMLHTTP”);
  };
}
于 2013-06-06T13:49:03.040 に答える