2013-08-13 12 views
17

में क्वेरी स्ट्रिंग पैरामीटर के एन्कोडिंग मुझे एक ग्राहक से एक अनुरोध मिला है कि वह आईई 10 पता बार में पैरामीटर के साथ मेरी वेब सेवा की क्वेरी स्ट्रिंग टाइप करने और सेवा के परिणाम प्राप्त करने में सक्षम होना चाहता है। मापदंडों हिब्रू में स्ट्रिंग की तरह शामिल हैं:आईई 10

http://mywebsite.com/service.asmx/foo?param1=123&param2=מחרוזתבעברית 

यह मेरे लिए लग रहा है कि कि IE10, अन्य (सामान्य) ब्राउज़रों के विपरीत, क्वेरी स्ट्रिंग पैरामीटर सांकेतिक शब्दों में बदलना नहीं होगा - हर गैर एएनएसआई चरित्र उसके बाद चला जाता है? निशान '3 एफ' बाइट में बदल दिया जाएगा, हालांकि यह पहले से क्या एन्कोड करता है? निशान - यूआरएल स्वयं।

उदाहरण के लिए, अगर मैं यूआरएल तक पहुँचने की कोशिश (पैरामीटर काल्पनिक है, यूआरएल नहीं है, और मैं इस साइट के साथ कोई संबंध नहीं है)

http://www.shlomo.co.il/pageshe/sales/רכב-למכירה.asp?param=פאראם 

और बाइट्स मैं करने के लिए भेजने के लिए wireshark में देखो सर्वर, यह पता चलता मुझे

wireshark output

आप देख सकते हैं यह urlencoded तार के साथ यूआरएल के हिब्रू हिस्सा स्थानापन्न करता है, लेकिन ????? साथ हिब्रू पैरामीटर, जो '3F के हैं विकल्प।

क्रोम में एक ही स्ट्रिंग इनकोडिंग किया जाएगा को इसकी संपूर्णता में बताया गया है:

GET http://www.shlomo.co.il/pageshe/sales/%D7%A8%D7%9B%D7%91-%D7%9C%D7%9E%D7%9B%D7%99%D7%A8%D7%94.asp?param=%D7%A4%D7%90%D7%A8%D7%90%D7%9D HTTP/1.1 

मैं Win7/IE10 और winXPheb/IE8 के साथ मशीनों पर यह कोशिश की।

मेरे IE सेटिंग्स (विशेष रूप से "हमेशा इनकोडिंग दिखाने पतों विकल्प" अगर यह मदद करता है और पुन: प्रारंभ देखने के लिए जाँच की है, लेकिन कोई फर्क पड़ा) कर रहे हैं:

enter image description here

मैं किसी भी जानकारी के लिए चारों ओर खोज करने की कोशिश की इस मुद्दे के बारे में, लेकिन इसमें से अधिक नहीं मिला।

मेरे प्रश्न हैं:

  • यह वास्तव में इस तरह है, या मैं कुछ याद आ रही है?
  • क्या यह व्यवहार कहीं भी दस्तावेज है?
  • आईई/विन में कोई सेटिंग है जो पैरामीटर एन्कोडिंग को सक्षम करती है।

पेज। निश्चित रूप से अगर मैं क्लाइंट/वेब यूई विकसित कर रहा था, तो मैं बस अपनी क्वेरी urlencode होगा, लेकिन ग्राहक से मेरा अनुरोध वास्तव में क्वेरी को आईई एड्रेस बार में पेस्ट करना था, यही कारण है कि मुझे इस विशिष्ट व्यवहार में रूचि है।

धन्यवाद।

उत्तर

18

हां, व्यवहार का आपका अवलोकन सटीक है। इंटरनेट एक्सप्लोरर 10 और नीचे यूआरएल एन्कोडिंग के लिए एक जटिल एल्गोरिदम का पालन करें। यह कथित तौर पर इंटरनेट एक्सप्लोरर 11 में अपडेट किया गया था, लेकिन मुझे पता चला है कि नया विकल्प doesn't seem to work

"हमेशा एन्कोडेड पते विकल्प दिखाएं" चिंता करता है कि क्या PunyCode आईडीएन होस्टनाम के लिए दिखाया गया है, और क्वेरी स्ट्रिंग को प्रभावित नहीं करता है। Send UTF-8 URLs ज्यादातर पथ के एन्कोडिंग पर लागू होता है, हालांकि यह अन्य कोडपैथ को भी प्रभावित कर सकता है

व्यवहार कहीं भी पूरी तरह से प्रलेखित नहीं है।मैं इसके बारे में अपने IEInternals ब्लॉग पर एक पूर्ण पोस्ट लिखना चाहता था लेकिन ऐसा करने से पहले माइक्रोसॉफ्ट से आगे बढ़ना समाप्त हो गया। this blog post में आंशिक स्पष्टीकरण है।

हां, ऐसी सेटिंग्स हैं जो व्यवहार को प्रभावित करती हैं। टूल्स> इंटरनेट विकल्प> उन्नत के अंदर Send UTF-8 URLs चेकबॉक्स उन चरों में से एक है जो यह निर्धारित करता है कि यूआरएल कैसे भेजे जाते हैं, लेकिन यह विकल्प अंधाधुंध नहीं करता है जो इसका तात्पर्य है (यह केवल यूटीएफ -8 पथ को एन्कोड करता है, क्वेरी स्ट्रिंग नहीं)। अन्य आवेष्टित में शामिल हैं:

  1. कहाँ URL टाइप किया गया था (जैसे पता पट्टी बनाम Start> Run, आदि)
  2. क्या सिस्टम के एएनएसआई कोड पृष्ठ पर है (उदाहरण के लिए क्या स्थान में ओएस डिफ़ॉल्ट के रूप में उपयोग करता है)
  3. ब्राउज़र

में वर्तमान में लोड पेज के चारसेट इन चर का एक परिणाम के रूप में, तुम नहीं मज़बूती से उपयोग URL जो कि ठीक से इंटरनेट एक्सप्लोरर में इनकोडिंग नहीं कर रहे हैं (जैसे% -escaped UTF8) कर सकते हैं।

+0

तदनुसार प्रश्न संपादित। मुझे फिर से शुरू करने के लिए समय लगा, अन्यथा मैं जल्द ही आपका जवाब चिह्नित करूंगा :) – alex440

+0

महान प्रश्न और उत्तर यहां, हालांकि मैंने ब्राउजर स्टैक के आईई 10 की कोशिश की और समस्या को हल करने के लिए "यूटीएफ -8 यूआरएल भेजें" की जांच की। आश्चर्य है कि क्या यह सही काम करता है? –

5

दुर्भाग्य से यह अभी भी इंटरनेट एक्सप्लोरर 11 के लिए सच है (, 11.0.9600.17358 निर्माण Win7-64)

मैंने देखा कि आप दुर्भाग्य से वेब सर्वर नहीं बदल सकते। हालांकि, जो नई सेवाओं का विकास कर रहे हैं वे अनुरोध चर पैरामीटर को पथ चर में बदल सकते हैं, उदा। http://myserver.com/page से? ग्राहक जावास्क्रिप्ट से वेब सेवा को फोन किया जाता है तो http://myserver.com/τεστ/