2010-01-13 6 views
5

मेरा मुद्दा निम्न है। मेरे पास एक्सएचटीएमएल 1.1 पृष्ठ है जिसमें एक फॉर्म और इनपुट फ़ील्ड है। इनपुट फ़ील्ड में से एक में एक मान होता है जो एक यूआरआई है। इस यूआरआई में एम्पर्सेंड के साथ कुंजी-मूल्य जोड़े शामिल हैं (&) तर्क विभाजक के रूप में, जिसे ब्राउज़र में किसी अन्य वेब एप्लिकेशन द्वारा जीईटी अनुरोध के रूप में पारित किया जाएगा।कैसे-एक्सएचटीएमएल 1.1 एक एम्पर्सेंड को बचने के बिना मान्य करता है?

आमतौर पर मैं कोड एक्सएचटीएमएल 1.1 के रूप में कोड को सत्यापित करने के लिए एम्पर्सेंड बनाने के लिए इकाई का उपयोग करता हूं। मेरी समस्या यह है कि एप्लिकेशन को GET अनुरोध प्राप्त नहीं होता है, क्योंकि (अपेक्षित के रूप में) ब्राउज़र समझ में नहीं आता है कि यूआरआई में & को कैसे संभालना है।

तो मेरा प्रश्न वास्तव में HTML इकाई का उपयोग किये बिना एम्पर्सेंड लिखना है, इसलिए ब्राउजर अभी भी इसे तर्क विभाजक के रूप में पहचानता है और जीईटी अनुरोध वेब ऐप पर ठीक से पास किया जाता है।

मैंने हेक्स (% 26) एम्पर्सेंड एन्कोडिंग करने की कोशिश की लेकिन ब्राउज़र अभी भी इसे उचित अनुवाद नहीं करता है, इसे उचित & वर्ण पर वापस "अनुवाद" नहीं करता है।

XHTML and & (Ampersand) encoding

+2

"(उम्मीद के रूप में) ब्राउज़र को नहीं समझता कैसे संभाल करने के लिए' '& यूआरआई में" - वह यह है कि ** नहीं ** अपेक्षा के अनुरूप है, तो आप पता बार में '&' नहीं देखना चाहिए जब तक कि आपने इसे डबल-एन्कोड नहीं किया हो। –

+0

कृपया प्रश्न दोबारा पढ़ें। एम्पर्सेंड इनपुट के मूल्य फ़ील्ड के अंदर एक यूआरआई का हिस्सा हैं। फॉर्म सबमिट करने के बाद उपयोगकर्ता को वही स्थान पर वापस कर दिया जाएगा, जैसा लिखा है। इसका मतलब यह है कि या तो मैं एम्पर्सेंड को एन्कोडेड छोड़ देता हूं लेकिन सत्यापन विफल रहता हूं, या मैं उन्हें समस्या के साथ एन्कोड करता हूं कि ब्राउज़र को पता बार में HTML इकाई प्राप्त होगी और प्रक्रिया में अगले ऐप में क्वेरी-स्ट्रिंग पर गुजरने में विफल रहेगा। –

+1

एचटीएमएल को एक डोम में कनवर्ट करते समय ब्राउजर को '&' '' 'को डीकोड करना चाहिए। URL या x-url-form-encoded डेटा का निर्माण करते समय इसे '&' '26% के रूप में एन्कोड करना चाहिए। यदि यह काम नहीं करता है, तो मुझे संदेह है कि आप सर्वर पर डेटा को गलत तरीके से संभालने वाले हैं। – Quentin

उत्तर

0

मैं इस पर अधिक समय व्यतीत परेशान नहीं कर सकता है।मैं बस तर्क विभाजक भी सेमी-कोलन को बदलकर (;) तो मैं यह एम्परसेंड के बजाय का उपयोग कर सकते हैं:

#cat .htaccess 
php_value arg_separator.input "&;" 
1

कोई रास्ता नहीं एक इकाई का उपयोग किए बिना एक विशेषता मान में एक ampersand चरित्र शामिल करने के लिए नहीं है:

इससे संबंधित एक सवाल है, लेकिन यह मैं पूछ रहा हूँ सवाल का सटीक उत्तर प्रदान नहीं करता है।

एम्पर्सेंड चरित्र को किसी इकाई या सीडीएटीए मार्करों के बिना टेक्स्ट नोड के रूप में शामिल करने का कोई तरीका नहीं है (लेकिन मुझे लगता है कि आप टेक्स्ट/एचटीएमएल के रूप में सेवा कर रहे हैं ताकि आप उनका उपयोग नहीं कर सकें)।

यह कहा गया - कोई भी ब्राउज़र जो इकाई को डीकोड करने में विफल रहता है टूट गया है। कोई मुख्यधारा ब्राउज़र वहां विफल रहता है। आप या तो एक अस्पष्ट और टूटे हुए ब्राउज़र का उपयोग कर रहे हैं, या समस्या का गलत निदान कर रहे हैं।

+0

कोई भी प्रमुख ब्राउज़र (आईई या एफएफ करेगा)। ब्राउज़र HTML के अंदर ठीक से डिकोडिंग को संभालता है। मैं वास्तव में पता बार में HTML इकाई का उपयोग करने का जिक्र कर रहा हूं। इसे आज़माएं ... –

+2

अच्छा मत करो! आप एड्रेस बार में सादे यूआरएल टाइप करते हैं, न कि HTML एन्कोडेड यूआरएल। यह नोटपैड में माइक्रोसॉफ़्ट वर्ड दस्तावेज़ खोलने जैसा है। – Quentin

+0

ब्राउज़र को उस यूआरआई पर रीडायरेक्ट किया गया है क्योंकि इसे सीधे HTML बार समेत पता बार में टाइप किया गया था। यह मेरा मुद्दा है। –

0

कोड के बिना यह बताना मुश्किल है कि आप यह जानकारी रखने की कोशिश कर रहे हैं, अगर आप कोड पोस्ट कर सकते हैं तो हम समस्या को समझने के लिए बेहतर काम कर सकते हैं।

<form action="example.com/?foo=1&bar=2> 
    <!-- ... --> 
</form> 

लिए:

<form action="example.com"> 
    <input type="hidden" name="foo" value="1" /> 
    <input type="hidden" name="bar" value="2" /> 
    <!-- ... --> 
</form> 
+0

क्वेरीस्ट्रिंग वास्तविक रूप क्रिया में नहीं है, लेकिन इनपुट फ़ील्ड के मान फ़ील्ड के अंदर है।यह एक ऐसा मूल्य है जो किसी वेब ऐप को पास हो जाता है, जो बाद में उपयोगकर्ता के ब्राउज़र को उसी यूआरआई (इसमें क्वेरी-स्ट्रिंग के साथ) देता है। यह वह जगह है जहां यह विफल रहता है क्योंकि ब्राउज़र पता बार में HTML इकाई को नहीं समझ सकता है। –

+0

गोटा, मेरा बुरा। अगर ऐसा होता है तो आप इनपुट क्षेत्र में चिपकते समय इसे बच नहीं सकते हैं (जो कि किसी भी XSS हमलों से बचने के लिए शायद सबसे अच्छा है) और फिर रीडायरेक्ट सर्वर-साइड करने से पहले इसे से बचें? – mynameiscoffey

+0

दुर्भाग्य से रीडायरेक्ट किसी तृतीय पक्ष से आता है। तो मुझे यूआरआई को ठीक से भेजने की जरूरत है क्योंकि मुझे इसे वापस आने की जरूरत है ... तीसरी पार्टी बस इसे प्राप्त करती है और अन्य काम करने के बाद उपयोगकर्ता के ब्राउज़र को वापस लौटाती है। –

1

रूप

एक संभावित (यदि यह सच है कि आप क्या सामना कर रहे हैं में है) जैसे अन्य रूप तत्वों में क्वेरी स्ट्रिंग में आइटम ले जाने के लिए है आपके द्वारा संदर्भित दूसरे प्रश्न में उल्लिखित, ब्राउज़र &amp; से & को पृष्ठ संसाधित करते समय परिवर्तित करता है, इसलिए "&" (&amp; नहीं) GET अनुरोध में सर्वर को भेजा जाना चाहिए। शायद आप जीईटी अनुरोध करने के लिए अजाक्स का उपयोग कर रहे हैं, इस मामले में, आपको HTML को डीकोड करने की आवश्यकता हो सकती है। एक्सएचटीएमएल के लिए इकाई की आवश्यकता है - कोई वैकल्पिक एन्कोडिंग नहीं, बस सुनिश्चित करें कि यह ठीक से डीकोड किया गया है।

संदर्भ: The & changes to &amp; in a hyperlink

+0

मुद्दा यह है कि ब्राउज़र सीधे HTML पट्टी को पता बार में प्राप्त करता है (जैसे कि इसे सीधे टाइप किया गया था)। मैं डीकोडिंग का जिक्र नहीं कर रहा हूं जो स्वचालित रूप से होता है उदा। यदि आप एक एंकर के अंदर एम्पर्सेंड समतुल्य इकाई का उपयोग करते हैं। –

+0

इनपुट क्षेत्र में यूआरआई कैसे रखा जा रहा है? यदि मान HTML का हिस्सा है, तो जावास्क्रिप्ट का उपयोग करते हुए यह इकाई का नाम होना चाहिए, तो यह नहीं होना चाहिए। –

1

भाग निकले & ग्राहक (ब्राउज़र) हर जगह एक्सएचटीएमएल दस्तावेज़ में से परिवर्तित किया जाना चाहिए।

तो तुम बच चाहिए हर &&amp; साथ

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