2015-04-24 13 views
6

में हैश (#) का व्यवहार क्या है मैं क्वेरी स्ट्रिंग के साथ नीचे यूआरएल भेज रहा हूं। क्वेरी स्ट्रिंग में एक पैरामीटर "tryverCmt" हैश (#) के साथ मूल्य है।क्वेरी स्ट्रिंग

"/abc/efd/xyz.jas?approverCmt=Transaction Log #459505&batchNm=XS_10APR2015_082224&mfrNm=Timberland" 

सर्वर साइड में जब मैं अनुरोध से प्राप्त करने की कोशिश की मैं

approverCmt = Transaction Log -----> "#459505" is missing 
    batchNm = null 
    mfrNm = null 

मिलता और अगर मैं क्वेरी स्ट्रिंग से या तो हैश (#) को दूर मैं% 23 हर चीज काम करता है के साथ # की जगह ठीक

मुझे समझ में नहीं आता कि मुझे एक पैरामीटर के लिए शून्य क्यों मिल रहा है यदि किसी अन्य पैरामीटर में हैश (#) प्रतीक है।

कोई भी समझा सकता है तो सराहना करें।

+0

देखें [यह प्रश्न] (http://stackoverflow.com/questions/20280212/getting-the-full-url-including-the-query-string-after-hash) –

उत्तर

10

इसे "खंड पहचानकर्ता" के रूप में जाना जाता है।

रूप wikipedia में उल्लेख किया है:

fragment identifier द्वारा एक हैश निशान # शुरू की किसी दस्तावेज़ के लिए एक URL की वैकल्पिक अंतिम हिस्सा होता है। यह आमतौर पर उस दस्तावेज़ के एक हिस्से की पहचान करने के लिए प्रयोग किया जाता है।

# के बाद का हिस्सा client के लिए जानकारी है। यह सर्वर को नहीं भेजा जाता है। सबकुछ केवल ब्राउजर की जरूरत है।

आप एक URL में विशेष वर्ण एन्कोड करने के लिए इतना है कि # पात्रों अन्य पात्रों कि जिस तरह से आप सुनिश्चित करें कि आपके पूरे यूआरएल सर्वर पर भेज दिया जाएगा हो सकता है में बदल दिए जाते जावास्क्रिप्ट में encodeURIComponent() फ़ंक्शन का उपयोग कर सकते हैं।

+4

अपडेट कर दूंगा, यह इस वर्ण के बाद रखे गए सब कुछ का उल्लेख करने योग्य है (यदि गैर-एन्कोडेड) ओपी के मुद्दे को समझाते हुए सर्वर पर नहीं भेजा गया है, और केवल उपयोग करने योग्य क्लाइंट-साइड है। –

+0

@ बार्टड्यूड: पॉइंटिंग के लिए धन्यवाद। मैंने उस भाग को भी जोड़ा है। – Prashant

1

हैश एक लंगर है:

अधिक जानकारी

2

हैश मूल्य लंगर के लिए है के लिए wikipedia देखते हैं, तो यह केवल क्लाइंट-साइड है, यह अक्सर कोणीय तरह क्लाइंट साइड ढांचे में प्रयोग किया जाता है क्लाइंट-साइड रूटिंग के लिए।

एंकर सर्वर-साइड उपलब्ध नहीं है।

आपके मामले में आपको एंकर की आवश्यकता नहीं है, लेकिन क्वेरी स्ट्रिंग को # ब्रेक के साथ पैरामीटर मान मान "लेनदेन लॉग # 45 9 505" है।

संपादित अनुभवहीन समाधान है कि काम नहीं करता है, बस इसे इतिहास के लिए वहाँ जाने, देखें नीचे

रियल समाधान समाधान एन्कोड करने के लिए क्लाइंट-साइड और डिकोड SERVEUR साइड

एन्कोडिंग है जावास्क्रिप्ट में

जावा

में
encodeURI("Transaction Log #459505") 
    //result value "Transaction%20Log%20#459505" 

डिकोड

java.net.URLDecoder.decode("Transaction%20Log%20#459505"); 
    //result "Transaction Log #459505" 

संपादित करें : लेकिन: जावास्क्रिप्ट जावा की तुलना में उसी तरह एन्कोड नहीं करता है, इसलिए सही उत्तर (मुझे उम्मीद है) मैन्युअल रूप से% 23 के साथ अपने सभी # को प्रतिस्थापित करना है, तो जावा इसे सामान्य रूप से डीकोड करेगा, या टिप्पणियों में सुझाए गए अनुसार एन्कोडुरिकॉम्पोनेंट का उपयोग करेगा। आपकी ज़रूरत के लिए प्रतिस्थापन समाधान पर्याप्त प्रतीत होता है। जावास्क्रिप्ट में

एनकोड:

encodeURI("yourUrl/Transaction Log #459505").replace(/#/,"%23") 
//result: yourUrl/Transaction%20Log%20%23459505 

जावा में डिकोड लंबे पद के लिए नहीं बदलता है

java.net.URLDecoder.decode("Transaction%20Log%20#459505") 
// result (java.lang.String) Transaction Log #459505 

क्षमा करें, मैं bettween जावा और JavaScrip यूआरएल एन्कोडिंग

अंतर नहीं देखा था
+1

'एनकोडुरि' ' /? : @ & = + $ # 'आपको' encodeURIComponent' – Prashant

+0

Thancks का उपयोग करने की आवश्यकता है: इसलिए जावा और जावास्क्रिप्ट में व्यवहार अलग है, मैं अपना उत्तर – pdem

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