2009-06-08 19 views
9

मैं समझने में असमर्थ हूं कि मुझे सर्वर उत्तर से सही आईएसओ -885 9 -1 charstet क्यों नहीं मिल सकता है। यह विरासत कोड पर एक काम होने के नाते, मैं पृष्ठों पर वर्णमाला एन्कोडिंग को शायद ही बदल सकता हूं।Jquery: AJAX पोस्ट और एन्कोडिंग

मैं बनाया JQuery के उपयोग

$.post("server-side-code", {t:ctext, i:ioff, sid:sessionid}, 
    function(data, status) {    
     $('#chk').append(data); 
    }); 

फोन एक पाठ क्षेत्र मूल्य पोस्टिंग बनाने जावास्क्रिप्ट का उपयोग करते हुए:

<form accept-charset='ISO-8859-1' method='post'> 
<textarea cols='40' rows='8' id='commento'></textarea><br> 
<input type='button' value='invia' id='submit'></form> 

सर्वर साइड अनुरोध संसाधित करते स्क्रिप्ट में अपने बहुत ऊपर वाणी:

text/html; charset=ISO-8859-1 

इसलिए, ईमानदारी से, मैं यह नहीं समझ सकता कि मुझे और क्या घोषित करना चाहिए, शब्दों में एन्कोडिंग का। इसके बावजूद, उच्चारण किए गए पात्र "àèéìòù" के रूप में वापस उछालते हैं: "à ÃÆ'à ¢ एक, Ã⠀ SA," एक HTML तत्व

में सर्वर उत्तर रखने के दौरान स्रोत को ascii के रूप में सहेजा जाता है।

ctext = escapeHTML(ctext); 

function escapeHTML (str) 
{ 
    var div = document.createElement('div'); 
    var text = document.createTextNode(str); 
    div.appendChild(text); 
    return div.innerHTML; 
}; 

कुछ विचार: इस चर तैनात किया जाना है पर अल्पविकसित एचटीएमएल एन्कोडिंग का समाधान नहीं करता है करने के लिए क्या करने के लिए tryng?

धन्यवाद!

+0

अच्छा ... यह पागल है। मुझे यकीन नहीं हो रहा है। समस्या को यूटीएफ -8 घोषित करने का हल किया गया है जो सर्वर साइड पेज AJAX अनुरोध के जवाब को वापस कर रहा है। मेरा मतलब है: एक वर्णमाला घोषित करना जो भिन्न है, पेज पर इस्तेमाल किए गए उचित वर्णमाला को AJAX अनुरोध बनाते हैं। – Daniel

उत्तर

5

के लिए मैं अब एक बेहतर समाधान है। दोनों पोस्ट और पूरी तरह से काम मिलता है। मैं टोमकैट पर काम कर रहा हूं जो डिफ़ॉल्ट रूप से आईएसओ 885 9 सामान को संभालता है।

वेब पेज गुण:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

सिर के अंदर वेबपेज के चारसेट।

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

अब, मेरे सारे parameteres भागने समारोह के साथ भाग कर रहे हैं, मैं इस समाधान से पहले प्रदान की है।

contentType : "application/x-www-form-urlencoded; charset=iso-8859-1" 

और अंत में, जब सर्वलेट या किसी रिसीवर पर मानकों को प्राप्त करने मैं एक डीकोड पैरामीटर इस का उपयोग कर पाने:

(function($) {$.fn.escape = function() { 
    return escape(this.val());};})(jQuery); 

अब, जब ajax अनुरोध भेजने के लिए मैं इस contentType निर्धारित किया है।

public String getHttpParameter(String name) throws Exception { 
    String value = this.getHttpRequest().getParameter(name); 
    return value == null || value.isEmpty() ? value : URLDecoder.decode(value,"ISO-8859-1"); 
} 

पोस्ट और जीईई 7 और 8, सफारी, क्रोम और FIREFOX में पूरी तरह से काम करता है।

+0

इस समाधान के साथ मुझे कोई समस्या है जब कोई कैरेक्टर '%' भेजता है। URLDecoder.decode एक अपवाद लॉन्च (Ilegal तर्क - अपूर्ण पीछे भागने (%) पैटर्न)। –

0

जहां तक ​​मुझे पता है कि jQuery वेब पेज के एन्कोडिंग का उपयोग करता है जो प्राप्त डेटा की व्याख्या करने के लिए AJAX विधि को आमंत्रित करता है। क्या आप पृष्ठ के लिए सही एन्कोडिंग का उपयोग कर रहे हैं? यदि हां, तो शायद सबसे अधिक त्रुटि सर्वर कोड के साथ है। यह देखने के लिए कि यह क्या लौट रहा है, AJAX हैंडलर प्रोग्रामेटिक (वेब ​​ब्राउज़र के बाहर) को कॉल करने का प्रयास करें।

+0

मैं इसका उपयोग कर रहा हूं: <मेटा http-equiv = "सामग्री-प्रकार" सामग्री = "टेक्स्ट/एचटीएमएल; charset = iso-8859-1"> – Daniel

1

सुनिश्चित नहीं है कि यह आपकी स्थिति को तोड़ रहा है, लेकिन accept-charset बेहद खराब रूप से समर्थित है, और आप इसका भी उपयोग नहीं कर सकते हैं। यह पृष्ठ एन्कोडिंग है जो सर्वर पर वापस भेजे जाने वाले नियंत्रण को नियंत्रित करेगा।

यदि आप अपने सर्वर पर सहेजी गई फ़ाइलों को देखते हैं तो यह उपयोगी होगा कि उनमें डेटा अच्छा है या नहीं। यह कम से कम स्थापित करेगा कि लेनदेन का क्लाइंट-> सर्वर हिस्सा काम कर रहा है या नहीं।

0

में सामान्य जानकारी: http://www.w3.org/International/O-HTTP-charset

incomming और बाहर जाने वाले डेटा के साथ php में utf8_decode साथ utf-8 स्ट्रिंग() बदलने की कोशिश।

0

मेरे सभी पृष्ठ आईएसओ -885 9 -1 हैं, मेरी प्रतिक्रिया भी 885 9 है लेकिन jquery AJAX मुझे बाहर निकाल रहा था। मेरा समाधान मूल $ .ajax कार्यक्षमता को इसके साथ लपेटा गया था। अनुरोध प्राप्त करने के लिए पूरी तरह से काम करता है, और मैं जल्द ही POST अनुरोध के लिए समाधान पोस्ट करूंगा।

कॉल:

$.myrequest({ 
    url: "/myapp/myurl", 
    params: { 
    key1: $("#myinput").escape() 
    } 
}); 

भागने समारोह

(function($) { 
$.fn.escape = function() { 
    return escape(this.val()); 
};})(jQuery); 

स्रोत के लिए स्रोत myrequest समारोह

(function($) { 

$.request = function(settings) { 

    /** 
    * generates a string that will be passed as 
    * data instead an object, but we have the capability 
    * of pass an object but in another variable called param 
    */ 
    function _parseParameters(settings) { 
     var data = ""; 
     for (var param in settings.params) { 
      data += param + "=" + settings.params[param] + "&"; 
     } 
     settings.data = data; 
    } 
    _parseParameters(settings); 
    $.ajax(settings); 
}})(jQuery); 
1

php फ़ाइल में बच() जावास्क्रिप्ट और urldecode() में उपयोग कर

यह काम करेगा: प्रयास करें।

2

मैं जावास्क्रिप्ट

escape($("#some_id").val()) 

में निम्नलिखित और PHP

urldecode($var) 

यह मेरे लिए काम किया में निम्नलिखित का इस्तेमाल किया है।

0

हो सकता है कि आप सामग्री को घोषित करना भूल गए हैं, इसे यूटीएफ -8 के रूप में निर्दिष्ट करने से पहले सर्वर की तरफ टाइप करें, इस मामले में, सामग्री टाइप शून्य है और सर्वर यह नहीं जानता कि यह किस प्रकार का डेटा है। एक बार जब आप सामग्री को यूटीएफ -8 के रूप में घोषित कर देते हैं, तो सर्वर यह समझने में सक्षम होता है कि किस प्रकार का डेटा काम कर रहा है। सामग्री को घोषित करना यूटीएफ -8 के रूप में टाइप सही समाधान नहीं है, हालांकि यह मदद करता है। रॉड्रिगो द्वारा प्रदान किया गया उत्तर शायद आपकी समस्या का सबसे अच्छा समाधान होगा।

संबंधित मुद्दे