طريقتان شائعتان لحل أحرف AJAX الصينية المشوهة
1. EncodeURI من جانب العميل (لا يلزم إجراء utf-8، وهو الإعداد الافتراضي)، وقم بتحويل ترميز iso-8859-1 إلى ترميز utf-8 من جانب الخادم
2. يتم تنفيذ EncodeURI مرتين على جانب العميل وتحويله مرة واحدة على جانب الخادم.
سبب نجاح الطريقة الثانية في حل المشكلة:
بعد التحويلين، قم بإجراء فك التشفير الأول باستخدام طريقة getparameter الأولى، نظرًا لأن الحل باللغة الإنجليزية (النتيجة بعد التشفير الأول)، فلن تكون هناك مشكلة في المرة الثانية، استخدم طريقة فك التشفير الخاصة بـ URLDecoder، لذا يمكن حل هذه المشكلة يتم حلها بشكل طبيعي. وتجدر الإشارة إلى أنه يجب تحديد تنسيق فك التشفير على أنه "utf-8" في طريقة فك التشفير. لا تستخدم العديد من المنصات الصينية utf-8 (أعتقد أنه gb2312)، وبالتالي فإن التحويل الافتراضي لفك التشفير ليس بالضرورة utf-8.
السبب وراء تشفير العميل مرتين وفك تشفيره مرة واحدة فقط على الخادم هو بسبب Tomcat. من أجل جعل البرمجة ملائمة للمبرمجين (الحصول على نفس الرمز ونشره)، سيقوم Tomcat تلقائيًا بفك ترميز المنشور، لذلك يكون هناك بيان فك تشفير واحد مكتوب بخط اليد على جانب الخادم. السبب وراء حاجتنا إلى إجراء التشفير وفك التشفير مرة أخرى هو أن عملية فك التشفير التلقائي لـ Tomcat لا يتم فك تشفيرها بالضرورة وفقًا للتشفير الذي نريده، ولكن الرموز التي تم فك تشفيرها للغة الإنجليزية والأحرف الأخرى هي نفسها بغض النظر عن النظام الأساسي الموجود عليها، لذلك يمكن أن يفسر Tomcat نتيجة الترميز الأول تلقائيًا، ثم يفسر كود encodeURI يدويًا مرة واحدة للحصول على التنسيق الذي تحتاجه.
الملحق: لقد لاحظت الآن سلوك المتصفح مرة أخرى، وأشعر أن ذلك ليس خطأ Tomcat، لأن المحتوى الصيني المعروض في المتصفح ليس هو المحتوى المشفر، وأنا حاليًا في حيرة من أمري بشأن مشكلات التشفير هذه، وآمل أن أفعل ذلك أعرف هذا. الأصدقاء الذين لديهم معرفة في هذا المجال مدعوون لتقديم المشورة لي!
حل مشكلة ذاكرة التخزين المؤقت IE
أضف طابعًا زمنيًا وتريد التحقق؟
حل مشاكل الوكيل
تريد؟ تحويل إلى $
رمز العينة:
انسخ رمز الكود كما يلي:
التحقق من الوظيفة () {
// الطريقة الأولى لحل مشكلة التشوه الصيني، يتم ترميز البيانات المرسلة من جانب الصفحة كـ encodeURI، ويستخدم مقطع الخادم new String(old.getBytes("iso8859-1"),"UTF-8");
// الطريقة الثانية لحل مشكلة التشوه الصيني، يتم تشفير البيانات المرسلة من جانب الصفحة مرتين، ويستخدم مقطع الخادم URLDecoder.decode(old, "UTF-8")
var url = "AJAXServer?name=" + encodeURI(encodeURI($("#userName").val()));
url = converterURL(url);
$.get(url,null,function(data){
$("#result").html(data);
});
}
// أضف طابعًا زمنيًا إلى عنوان URL لخداع المتصفح وعدم قراءة ذاكرة التخزين المؤقت
وظيفة تحويلURL(url) {
// احصل على الطابع الزمني
var timstamp = (new Date()).valueOf();
// قم بلصق معلومات الطابع الزمني في عنوان url
//url = "AJAXServer"
إذا (url.indexOf("؟") >= 0) {
url = url + "&t=" + timstamp;
} آخر {
url = url + "?t=" + timstamp;
}
عنوان URL للإرجاع؛
}