コードを見てください:
var xmlhttp=getHTTPObject();
var post="テスト・テスト+テスト・";
xmlhttp.open('POST', 'test.asp?random='+Math.random(), true);
xmlhttp.setrequestheader("コンテンツの長さ",post.length);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200 ){
アラート(xmlhttp.responseText);
true を返します。
}
}
xmlhttp.send("act="エスケープ(ポスト));
ここでは文字列escape("test・test+test・")をPOSTモードで送信し、
ASP側で受信する際に
setRequestHeader
を使用しました。
<%Response.Charset="gb2312"
Response.Write Unescape(Request("act"))
%>
最後に、デバッグ後、「・」も「+」も表示されない結果が表示されます。
最初は、asp と javascript のエスケープとアンエスケープの非互換性の結果だと思いました。その後、アンエスケープの代わりに vbsunescape (以下に示す) を使用しましたが、問題は同じままでした。
<script language="javascript" runat="server">
function vbsunescape(source){
unescape(ソース)を返します。
}
</script>
+ をエスケープしましたが、その方法がわかりません。最初はバイナリ ファイルに書き込んで確認したかったのですが (バイナリ ファイルである必要があります)、ストリームを使用して操作しました。ファイルを作成するときにミスを繰り返します。まだやるべきことがたくさんあるので、この問題はそのままにしておきます。このブログをご覧になっている専門家の方、解決したら教えてください。
関数エスケープ2(str){
returnscape(str).replace(/+/g,"%2b");
-----------------------------------------------
皆さんの返信拝見しました、ありがとうございます。皆さんの考えのエッセンスを吸収して、やっと分かりました。 。 。 。
最終的な完璧な解決策は、
送信者が encodeURIComponent(escape(xxxxxxx)) を使用できることです (他の送信コードと受信コードは上記と同じです)。
昨日 encodeURI を試しただけで、encodeURIComponent とエスケープ ソケット メソッドについてはまったく考えていませんでした。今、インスピレーションを得て試してみました。素晴らしいです、おお!食べに行きましょう! !