2013-02-12 9 views
10

मुझे POST विधि द्वारा डेटा भेजने की आवश्यकता है।जावास्क्रिप्ट पर एन्कोडेड पोस्ट डेटा कैसे तैयार करें?

उदाहरण के लिए, मेरे पास स्ट्रिंग है "bla & bla & bla"। मैंने encodeURI का उपयोग करने की कोशिश की और परिणामस्वरूप "bla & bla & bla" मिला। मुझे इस उदाहरण के लिए कुछ सही के साथ "&" को प्रतिस्थापित करने की आवश्यकता है।

सही पोस्ट डेटा तैयार करने के लिए मुझे किस प्रकार की विधि कॉल करनी चाहिए?

UPDATED:

मैं केवल charachters जो पोस्ट अनुरोध तोड़ दिया हो सकता है परिवर्तित करने के लिए की जरूरत है। केवल उन्हें

+0

http://stevenbenner.com/2010/03/javascript-regex-trick-parse-a-query-string-into-an-object/ – karaxuna

+0

क्या ऐसा करने के लिए कोई मानक तरीका नहीं है? – Dmitry

+0

क्या आप JQuery का उपयोग कर रहे हैं? –

उत्तर

14
>>> encodeURI("bla&bla&bla") 

"bla&bla&bla" 

>>> encodeURIComponent("bla&bla&bla") 

"bla%26bla%26bla" 
+1

यदि कोई व्यक्ति नकल करने की कोशिश कर रहा है कि ब्राउज़र क्या अपलोड करेगा, तो किसी को यह ध्यान रखना चाहिए कि वेब फॉर्म (विशेष रूप से उन फाइल अनुलग्नकों के बिना) 'एप्लिकेशन/एक्स-www-form-urlencoded' एन्कोडिंग। इस प्रारूप में, ब्राउज़र '% 20' के बजाय' + 'वर्णों के रूप में रिक्त स्थान को एन्कोड करेंगे (जैसा कि 'एन्कोडुरिकोम्पोनेंट' के मामले में है) - एन्कोडिंग संदिग्ध है, लेकिन या तो विकल्प उसी डेटा पर डीकोड करता है। [यहां प्रारूप देखें।] (Https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1) मैं जोर देता हूं कि 'एनकोडुरिकॉम्पोनेंट' में जाने का तरीका है यह जवाब –

5

उपयोग encodeURIComponent() encodeURI के रूप में() सांकेतिक शब्दों में बदलना नहीं होगा:

http://xkr.us/articles/javascript/encode-compare/

+0

मुझे जावास्क्रिप्ट कोड चाहिए। – Dmitry

+1

कृपया दिए गए लिंक से गुज़रें .. –

12

तुम भी escape() फ़ंक्शन का उपयोग कर सकते हैं: [email protected]#$&*()=:/,;?+'

इस दिए गए लिंक पर बहुत अच्छी तरह से समझाया गया है escape() फ़ंक्शन एक स्ट्रिंग एन्कोड करता है। यह समारोह एक स्ट्रिंग पोर्टेबल बनाता है, तो यह के अपवाद के साथ समर्थन करता है कि ASCII characters.This समारोह विशेष वर्ण encodes किसी भी कंप्यूटर के लिए किसी भी नेटवर्क पर प्रसारित किया जा सकता,: * @ - _ + . /

var queryStr = "bla&bla&bla"; 
alert(queryStr);    //bla&bla&bla 
alert(escape(queryStr));  //bla%26bla%26bla 

उपयोग unescape() स्ट्रिंग डीकोड करने के लिए।

var newQueryStr=escape(queryStr); 
alert(unescape(newQueryStr)); //bla&bla&bla 

नोट:

बच()

यह उपयोग न करें:

escape() will not encode: @*/+ 

    encodeURI() will not encode: [email protected]#$&*()=:/,;?+' 

    encodeURIComponent() will not encode: ~!*()' 

इंटरनेट पर कुछ खोज के बाद, मैं निम्नलिखित मिल गया।

encodeURI()

encodeURI उपयोग एक कार्यशील URL चाहते हैं। इस कॉल करें:

encodeURI("http://www.google.com/a file with spaces.html") 

पाने के लिए:

http://www.google.com/a%20file%20with%20spaces.html 

encodeURIComponent फोन न करें, क्योंकि यह यूआरएल को नष्ट करने और

http%3A%2F%2Fwww.google.com%2Fa%20file%20with%20spaces.html 

encodeURIComponent()

वापसी होगी जब आप एक यूआरएल पी एन्कोड करना चाहते हैं तो encodeURIComponent का उपयोग करें rameter।

param1 = encodeURIComponent ("http://xyz.com/?a=12&b=55")

Then you may create the URL you need: 

url = "http://domain.com/?param1=" + param1 + "&param2=99"; 

और आप इस पूर्ण URL मिल जाएगा:

http://www.domain.com/?param1=http%3A%2F%2Fxyz.com%2F%Ffa%3D12%26b%3D55¶m2=99 

ध्यान दें कि encodeURIComponent 'चरित्र बच नहीं करता है। href='MyUrl', जैसे एचटीएमएल विशेषताओं को बनाने के लिए इसका उपयोग करना एक आम बग है जो इंजेक्शन बग का सामना कर सकता है। आप तार से एचटीएमएल निर्माण कर रहे हैं, या तो बजाय का उपयोग "अगर 'विशेषता उद्धरण के लिए, या एन्कोडिंग का एक अतिरिक्त परत जोड़ ('% 27 के रूप में एन्कोड किया जा सकता है)

REF:। When are you supposed to use escape instead of encodeURI/encodeURIComponent?

इसके अलावा, के रूप में आप JQuery उपयोग कर रहे हैं, this में निर्मित समारोह पर एक नज़र डालें।

+0

क्या यह POST विधि के लिए अधिक सही होगा? मैं पोस्ट रिसीवर का कोड नहीं बदल सकता। मुझे एपीआई के अनुपालन में यूआरएल-एन्कोडिंग का उपयोग करने की आवश्यकता है। – Dmitry

+0

@Altaveron mu अपडेट देखें और देखें कि आप क्या चाहते हैं ... !! –

+0

लेकिन मुझे नहीं पता कि POST डेटा के लिए कौन सी विधि सबसे अच्छी है :( – Dmitry

-1

मैं जावास्क्रिप्ट रूप से बनाए गए गुप्त फ़ॉर्म पोस्ट चाहते हैं।

तो सवाल है, तो encodeURIComponent() eac पर इस्तेमाल किया जाना चाहिए है एच POST चर।

मुझे इस धागे में दिमित्री (और मेरा) प्रश्न का उत्तर नहीं मिला है। लेकिन मुझे जवाब in this thread मिला है।

फॉर्म/POST के मामले में जहां आपके पास अपलोड फ़ील्ड है, आपको <form enctype="multipart/form-data"> का उपयोग करना होगा, यदि कोई अपलोड फ़ील्ड उपयोग नहीं किया जाता है, तो आपको खुद को described here के रूप में चुनना चाहिए। फॉर्म सबमिट करने से पूरी तरह से काम करना चाहिए, इसलिए encodeURIComponent() का स्पष्ट रूप से उपयोग करने की आवश्यकता नहीं है।

यदि आप किसी फॉर्म का उपयोग किये बिना या कुछ लाइब्रेरी के बिना एक एचटीपी पोस्ट बनाते हैं जो आपके डेटा से एक एचटीपी पोस्ट बनाता है, तो आपको एक enctype = और डेटा में शामिल होने की आवश्यकता है।

यह application/x-www-form-urlencoded के लिए आसान होगा, जहां आप प्रत्येक मूल्य पर encodeURIComponent() का उपयोग करेंगे और जीईटी अनुरोध के लिए बिल्कुल उनके साथ शामिल होंगे।

यदि आप multipart/form-data का उपयोग करने का निर्णय लेते हैं ....? आपको इस तरह के मामले में में एन्कोड करने और उनसे जुड़ने के लिए और अधिक Google करना चाहिए।

+0

यह कहने का एक बहुत लंबा रास्ता है "ज्यादातर मामलों में, तीन साल पहले उत्तर का उपयोग करें, अन्यथा Google का उपयोग करें"। – Quentin

+0

"encodeURIComponent() स्पष्ट रूप से उपयोग करने की कोई ज़रूरत नहीं है" वाक्यांश ने मेरी मदद की – bendecko

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