2010-03-18 12 views
23

में मैं अपने सर्वर पर यूटीएफ -8, जापानी टेक्स्ट भेज रहा हूं। यह फ़ायरफ़ॉक्स में काम करता है। मेरे access.log और हेडर हैं:JQuery AJAX मेरे सर्वर पर यूटीएफ -8 नहीं भेज रहा है, केवल आईई

/ajax/?q=%E6%BC%A2%E5%AD%97 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Content-Type application/x-www-form-urlencoded; charset=UTF-8 

Howeer, IE8 में, मेरे access.log का कहना है:

/ajax/?q=?? 

किसी कारण से, IE8 घूम रहा है मेरी AJAX के प्रश्न चिह्न में कहते हैं। क्यूं कर!? मैंने कुछ ट्यूटोरियल के अनुसार स्क्रिप्ट चार्ससेट और कंटेंट टाइप टाइप किया, लेकिन अभी भी कोई भाग्य नहीं है।

और ये मेरे कोड है:

$.ajax({ 
    method:"get", 
    url:"/ajax/", 
    scriptCharset: "utf-8" , 
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
    data:"q="+query ..., 
    ... 
    }) 
+0

वह पृष्ठ है जो कॉल को भी शुरू करता है utf-8 एन्कोडेड (सही वर्णसेट परिभाषित के साथ)? –

+0

हां, मेटा टैग है: <मेटा http-equiv = "सामग्री-प्रकार" सामग्री = "टेक्स्ट/एचटीएमएल; charset = utf-8" />। इसके अलावा, स्वीकृति-पत्रसेट फॉर्म में है। – TIMEX

+0

क्या पृष्ठ वास्तव में यूटीएफ -8 प्रारूप में सहेजा गया है? दूसरे दिन एक समान समस्या के साथ एक प्रश्न था जो फ़ाइल में यूटीएफ -8 वर्णसेट निर्दिष्ट कर रहा था लेकिन फ़ाइल को एएनएसआई के रूप में सहेजा गया था। –

उत्तर

53

, के रूप में bobince बहुत सही ढंग से उसकी टिप्पणी में उल्लेख किया encodeURIComponent()

data:"q="+encodeURIComponent(query) 

साथ क्वेरी पैरामीटर एन्कोडिंग प्रयास करें यदि आप ऑब्जेक्ट नोटेशन का उपयोग करने के मानकों को पारित करने के लिए AJAX विधि यह एन्कोडिंग को स्वयं ही संभाल लेगा ..

तो

data:{ q : query } 

jQuery एन्कोडिंग संभाल कर देगा ..

+0

+1 यह मेरा पहला विचार था, लेकिन मैंने सोचा कि jQuery ने एन्कोडिंग को संभाला है। अब यह वास्तव में समझ में आता है कि अगर jQuery पहले से ही एक क्वेरी स्ट्रिंग पर सेट किया गया था तो jQuery एन्कोडिंग को संभाल नहीं पाएगा। ओह! –

+0

@ एंडी, मेरे पास शुरुआत में एक ही विचार था, लेकिन फिर वास्तविक कोड देखा .. :) –

+3

हां, यह '{q: query}' जैसे मैपिंग को 'AJAX()' में मैप करने का एक अच्छा कारण है और चलो jQuery आपके लिए एन्कोडिंग के बारे में चिंता करें। – bobince

0

मैं जानता हूँ कि यह एक पुरानी पोस्ट है, लेकिन मैं हाल ही में इस समस्या थी और मैं बस में और मामले में किसी को एक ही समस्या है योगदान करना चाहते हैं। मैं PHP का उपयोग कर रहा हूं लेकिन मुझे यकीन है कि प्रत्येक सर्वरसाइड भाषा पर एक विकल्प है। यह सिर्फ बातें की एक जोड़ी थी:

  1. सुनिश्चित करें कि आप शीर्ष लेख जोड़कर अपने ajax प्रतिक्रिया पर सही हेडर भेज रहे हैं ('सामग्री प्रकार: text/html; charset = utf-8'); यह आपकी पहली पंक्ति होनी चाहिए। अगर आपको कोई त्रुटि है कि हेडर पहले से ही भेजे गए हैं या ऐसा कुछ है क्योंकि आपके कोड में कहीं भी आप अतिरिक्त स्थान या हेडर भेजने से पहले कुछ आउटपुट कर रहे हैं तो अपना कोड जांचें।

  2. जब आप अपने सर्वर में अपनी प्रतिक्रिया बनाते हैं, तो सुनिश्चित करें कि आप अपने सभी वर्णों को echo htmlentities ($ your-string, null, 'utf-8) का उपयोग करके correspond क्योंकि आईई को यह बताने के बाद भी कि आप यूटीएफ -8 डेटा भेज रहे हैं, ऐसा लगता है जैसे आईई भूल जाता है या यह कुछ भी नहीं मानता है, इसलिए इसे आपके कोड में जोड़ने से सही आउटपुट सुनिश्चित होगा।

आपकी मदद के लिए धन्यवाद।

2

मैंने इस पोस्ट को पढ़ा है उम्मीद है कि यह उस समस्या को हल करेगा जो मैंने पार किया था और उसे utf8 रूपांतरणों के साथ करना था।

मेरे मामले में यह पता चला कि सर्वर इंजन (node.js) डेटा की सामग्री-लंबाई की गणना डेटा के साथ कच्चे और utf8 नहीं है, इस प्रकार यूएफटी 8 में दो वर्णित वर्णों की गणना की गई थी जैसे कि वे जहां एक char जिसके परिणामस्वरूप सर्वर एक चरित्र को बहुत कम भेजता है।

देखें क्या मैं इसे यहाँ हल करने के लिए किया था: Not well formed Json when sending to CouchDB

0

JavaScript में उपयोग encodeURIComponent()।यहां नमूना है:

function doPost() 
{ 
    var URL = "http://localhost/check.php?yab=" + encodeURIComponent(document.getElementById("formSearch").childNodes[1].value); 
    xmlHttp.open("GET", URL); 
    xmlHttp.send(); 
}; 
संबंधित मुद्दे