HTML

2012-04-17 21 views
10

में href विशेषता को एन्कोड करने के लिए कैसे करें href विशेषता की सामग्री के विरुद्ध क्या किया जाना चाहिए: HTML या URL एन्कोडिंग?HTML

<a href="???">link text</a> 

एक तरफ, चूंकि href विशेषता में यूआरएल है, तो मुझे यूआरएल एन्कोडिंग का उपयोग करना चाहिए। दूसरी ओर, मैं इस यूआरएल को HTML में डाल रहा हूं, इसलिए यह HTML एन्कोडेड होना चाहिए।

कृपया इस विरोधाभास को दूर करने में मेरी सहायता करें।

धन्यवाद।


संपादित करें:

यहाँ विरोधाभास है। मान लीजिए कि URL में '<' और '>' वर्ण हो सकते हैं। यूआरएल एन्कोडिंग उनसे नहीं बच पाएगा, इसलिए href विशेषता के अंदर आरक्षित HTML वर्ण होंगे, जो मानक का उल्लंघन करते हैं। एचटीएमएल एन्कोडिंग '<' और '>' अक्षर से बच जाएगा और एचटीएमएल मान्य होगा, लेकिन उसके बाद यूआरएल में अप्रत्याशित '' वर्ण होंगे (यह यूआरएल के लिए आरक्षित चरित्र है, इसे क्वेरी स्ट्रिंग पैरामीटर के डिलीमीटर के रूप में प्रयोग किया जाता है) ।

Reserved URL charactersreserved HTML characters का सुपरसैट '<' और '>' को छोड़कर HTML के लिए आरक्षित है लेकिन यूआरएल के लिए नहीं है।


संपादित करें 2:

मैं '<' और '>' पात्रों के बारे में गलत था, वे वास्तव में URL एन्कोडिंग सहायता से निकले प्रतिशत हैं। यदि ऐसा है, तो इस मामले में यूआरएल एन्कोडिंग पर्याप्त है, है ना?

+1

आप अब तक कुछ भी करने की कोशिश की है:

उदाहरण के लिए (यह एक सरल उदाहरण है कि मान लिया गया $ _GET में डेटा सही है और मौजूद है, ऐसा नहीं है कि असली दुनिया में है)? –

+2

यह "आपने कुछ भी करने की कोशिश की है" मेम मूर्खतापूर्ण हो रही है। ब्राउज़र त्रुटि वसूली के साथ, डेटा एन्कोडिंग का एक बड़ा हिस्सा सुरक्षा समस्याओं के खिलाफ सुरक्षा के लिए है। अगर आप कुछ कोशिश कर रहे हैं तो आपको यह बताने के लिए कैसे कहा जाता है? मान लें कि आपके पास जो भी सुरक्षा परीक्षण सूट पर्याप्त कवरेज है? यह एक मौलिक तकनीक के बारे में एक बिल्कुल उचित सवाल है। – Quentin

+0

क्वांटिन कम या ज्यादा सही है, लेकिन सवाल बनी हुई है, कौन सी परिस्थितियां विरोधाभासी हो सकती हैं? क्या आप एक उदाहरण दिखा सकते हैं? और क्या आपने दोनों समाधानों का प्रयास किया और क्या वे दोनों काम करते थे, या दोनों काम नहीं करते थे? –

उत्तर

10

सामान्य के रूप में एक यूआरएल का निर्माण। यूआरएल बनाने के लिए नियमों का पालन करें। आपके द्वारा डाले गए कोड को एन्कोड करें।

फिर HTML को सामान्य के रूप में बनाएं। HTML बनाने के लिए नियमों का पालन करें। डेटा को एन्कोड करें जैसा आपने इसे रखा है।

यानी दोनों (लेकिन सही क्रम में) करें।

वे पारस्परिक रूप से अनन्य नहीं हैं, इसलिए कोई विरोधाभास नहीं है।

$search_term = $_GET['q']; 
$page = $_GET['page']; 
$next_page = $page + 1; 
$next_page_url = 'http://example.com/search?q=' . urlencode($search_term) . '&page=' . urlencode($page); 
$html = '<a href="' . htmlspecialchars($next_page_url) . '">link text</a>'; 
+0

धन्यवाद, क्वांटिन, मुझे आपका अंक मिला है। लेकिन मुझे दो चीजों के बारे में बिल्कुल यकीन नहीं है। 1) क्या होगा यदि htmlspecialchars() वास्तव में कुछ एन्कोड किया गया हो? यदि ऐसा है, तो यूआरएल के अंदर '&' अक्षर होंगे, जिनकी अनुमति नहीं है। 2) क्या यूआरएल एन्कोडिंग के लिए कुछ आरक्षित HTML वर्ण खुद को छोड़ना संभव है? मुझे लगता है कि यह नहीं है। –

+0

URL के अंदर ' 'नहीं होगा। HTML के अंदर '& 'होगा। एचटीएमएल को पार्स किया जाएगा और चरित्र '&' डीओएम में दिखाई देगा। यदि आप किसी ब्राउज़र में विशेषता के HTML स्रोत को प्रतिलिपि/चिपकाते हैं तो यह टूट जाएगा, लेकिन आपको ऐसा नहीं करना चाहिए। अगर आप किसी टेक्स्ट फ़ाइल में यूआरएल संग्रहीत करते हैं तो इसे तोड़ दिया जाएगा, फिर इसे दबाए रखें, फिर संपीड़ित फ़ाइल की बाइनरी सामग्री को एड्रेस बार में कॉपी/पेस्ट करें। – Quentin

+0

मुझे उन पात्रों की सूची याद नहीं है जो मेरे सिर के ऊपर से यूआरएल में एन्कोड नहीं हैं। निश्चित रूप से यूआरएल में वर्ण (जैसे '&') शामिल हो सकते हैं, जिसमें HTML में विशेष अर्थ होता है (और यदि आप चाहते हैं कि यूआरएल में उनका विशेष अर्थ हो, तो यूआरएलएनकोड नहीं किया जाना चाहिए)। – Quentin