2012-01-30 9 views
29

मैं प्रवेश किया Chrome की कंसोल में निम्नलिखित:जावास्क्रिप्ट decodeURI (घटक) विकृत URI अपवाद

decodeURIComponent('a%AFc'); 
इसके बजाय a0xAFc के परिणामस्वरूप की

, यह एक URIError अपवाद (विकृत URI) का कारण बना।

मैंने कई बहाने सुना है कि यह क्यों संभव हो सकता है, लेकिन मुझे समझ में नहीं आता क्यों?

decodeURIComponent() विशेष रूप से कार्य को डीकोड करना चाहिए, यूआरआई को सत्यापित नहीं करना चाहिए।

उत्तर

37

%AF अपने ही लेकिन यूनिकोड अनुक्रम (MACRON - %C2%AF) की ओर से एक चरित्र नहीं है।

%AFencodeURIComponent लेकिन escape की तरह कुछ द्वारा उत्पादित नहीं किया गया था, तो यह unescape द्वारा डीकोड किया जा सकता।

क्या आप शायद जरूरत decodeURIComponent('%C2%AF')

+2

मैं इसे बना के बाद मैं एन्कोडेड पाठ का भार डिकोडिंग की कोशिश की, विफल रही है और पाया है कि यह है कि विशेष चरित्र पर गला घोंटना होगा। शायद 'अनदेस्केप' मुझे चाहिए। – Christian

+1

@ क्रिस्टियनसिबरबर 'एनकोडुरिकोम्पोनेंट() 'आमतौर पर बेहतर विकल्प होता है क्योंकि यह यूटीएफ -8 के साथ काम करता है। हालांकि, अपने आप पर '0xAF' मान्य यूटीएफ -8-एन्कोडेड वर्ण अनुक्रम नहीं है। यही कारण है कि आपका कोड काम नहीं करता है। मुझे उम्मीद है कि यह अब स्पष्ट है। – duri

+3

तो अगर मुझे ASCII/iso-8859-1 प्रतिशत-एन्कोडेड इनपुट को संभालने की आवश्यकता है तो क्या होगा? 'अनदेस्केप' को बहिष्कृत किया गया है, और वहां 'unescapeURI' भी नहीं है – felixfbecker

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