انظر إلى الكود:
var xmlhttp=getHTTPObject();
var post="test·test+test·";
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 = function(){
إذا (xmlhttp.readyState == 4 && xmlhttp.status == 200){
تنبيه (xmlhttp.responseText)؛
عودة صحيحة؛
}
}
xmlhttp.send("act="escape(post));
هنا، أرسلت السلسلة escape("test·test+test·") في وضع POST، واستخدمت setRequestHeader
عند استلامها من جانب ASP، استخدمت
<%Response.CodePage=936%>
<%Response.Charset="gb2312"
Response.Write Unescape(Request("act"))
%>
أخيرًا، بعد تصحيح الأخطاء، النتيجة التي تراها هي عدم ظهور "·" أو "+".
في البداية اعتقدت أن ذلك كان نتيجة عدم توافق الهروب وunscape في asp وjavascript. لاحقًا استخدمت vbsunescape (كما هو موضح أدناه) بدلاً من unescape وظلت المشكلة كما هي.
<script language="javascript" runat="server">
الدالة vbsunescape(source){
إرجاع unscape(مصدر);
}
</script>
لقد هربت من +، لكني لا أعرف كيفية القيام بذلك، ما الذي تم تحويله إلى؟ ملف ثنائي ضمن asp. أستمر في ارتكاب الأخطاء عند إنشاء الملفات، وليس لدي الوقت للقيام بذلك الخبراء الذين يرون هذه المدونة إذا قمت بحلها، اسمحوا لي أن أعرف.
وظيفة الهروب2(شارع){
return escape(str).replace(/+/g,"%2b");
}
----------------------------------------------
رأيت ردود الجميع، شكرا لكم جميعا. بعد استيعاب جوهر أفكار الجميع، اكتشفت ذلك أخيرًا. . . .
الحل الأمثل النهائي هو أن
المرسل يمكنه استخدام encodeURIComponent(escape(xxxxxxx)) (رموز الإرسال والاستقبال الأخرى هي نفسها المذكورة أعلاه).
لقد جربت encodeURI بالأمس فقط ولم أفكر في أساليب encodeURIComponent ومقبس الهروب لقد ألهمتني الآن وجربتها، إنها رائعة، يا إلهي! اذهب لتناول الطعام! !