코드를 보십시오:
var xmlhttp=getHTTPObject();
var post="테스트·테스트+테스트·";
xmlhttp.open('POST', 'test.asp?random='+Math.random(), true);
xmlhttp.setrequestheader("content-length",post.length);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = 함수(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200 ){
경고(xmlhttp.responseText);
사실을 반환;
}
}
xmlhttp.send("act="escape(post));
여기서는 POST 모드에서 escape("test·test+test·")라는 문자열을 보냈고,
ASP 측에서 이를 받을 때는
<%Response.CodePage=936%>를
사용했습니다.
<%Response.Charset="gb2312"
Response.Write Unescape(요청("act"))
%>
마지막으로 디버깅 후 표시되는 결과는 "·"도 "+"도 표시되지 않는다는 것입니다.
처음에는 asp와 javascript에서 escape와 unescape가 호환되지 않기 때문에 발생하는 것이라고 생각했습니다. 나중에 unescape 대신 vbsunescape(아래 참조)를 사용했지만 문제는 동일하게 유지되었습니다.
<script 언어="javascript" runat="서버">
함수 vbsunescape(소스){
이스케이프 반환(소스);
}
</script>
+를 이스케이프 처리했는데 어떻게 해야할지 모르겠습니다. 무엇으로 변환되었나요? 원래는 바이너리 파일로 작성하여 확인하려고 했으나(바이너리 파일이어야 함) 스트림을 사용하여 작업했습니다. ASP에서 바이너리 파일을 만들 때 계속 실수가 발생합니다. 아직 할 일이 많아서 이 문제는 잠시 생략하겠습니다. 이 블로그를 보시는 전문가님들 알려주시면 감사하겠습니다.
함수 escape2(str){
return escape(str).replace(/+/g,"%2b");
}
----------------------------------
다들 답글 잘 봤습니다. 모두 감사합니다. 모두의 생각의 본질을 흡수한 끝에 마침내 알아냈습니다. . . .
최종적인 완벽한 해결책은
송신자가 encodeURIComponent(escape(xxxxxxx))를 사용할 수 있다는 것입니다(다른 송신 및 수신 코드는 위와 동일합니다).
저는 어제 encodeURI만 시도했지만 갑자기 encodeURIComponent 및 이스케이프 소켓 메소드를 생각하지 않았습니다. 이제 영감을 받아 사용해 봤는데, 굉장해요, 오예! 가서 먹어! !