2011-01-24 10 views
14

मैं हमेशा यूआरएल/एचटीएमएल एन्कोडिंग/एस्केपिंग के साथ उलझन में रहा हूं। मैं PHP का उपयोग कर रहा हूं, इसलिए कुछ साफ़ करना चाहते हैं।यूआरएल/एचटीएमएल एस्केपिंग/एन्कोडिंग

मैं कह सकता हूँ कि मैं हमेशा

  • urlencode का उपयोग करना चाहिए: अलग-अलग क्वेरी स्ट्रिंग भागों

    $url = 'http://test.com?param1=' . urlencode('some data') . '&param2=' . urlencode('something else'); 
    
  • htmlentities के लिए: तो <> जैसे विशेष वर्ण से बचने के लिए है कि अगर ठीक से रेंडर किया जाएगा ब्राउज़र

क्या कोई अन्य जगह होगी जहां मैं प्रत्येक फ़ंक्शन का उपयोग कर सकता हूं। मैं इन सभी भागने वाली चीजों में अच्छा नहीं हूं, हमेशा उनके द्वारा उलझन में

उत्तर

29

सबसे पहले, आप समय के htmlentites चारों ओर 99% का उपयोग नहीं किया जाना चाहिए: तो आप अक्सर की तरह कुछ देखेंगे। इसके बजाय, आपको xml/html दस्तावेज़ों के अंदर उपयोग के लिए पाठ से बचने के लिए htmlspecialchars() का उपयोग करना चाहिए। htmlentities केवल वर्णों को प्रदर्शित करने के लिए उपयोगी हैं कि आप जिस देशी अक्षर का उपयोग कर रहे हैं वह प्रदर्शित नहीं हो सकता है (यह उपयोगी है यदि आपके पृष्ठ ASCII में हैं, लेकिन आपके पास कुछ यूटीएफ -8 वर्ण हैं जिन्हें आप प्रदर्शित करना चाहते हैं)। इसके बजाय, बस पूरा पृष्ठ यूटीएफ -8 बनाएं (यह कठिन नहीं है), और इसके साथ किया जाना चाहिए।

urlencode तक, आपने सिर पर नाखून मारा।

तो, संक्षेप में:

  • अंदर HTML:

    <b><?php echo htmlspecialchars($string, ENT_QUOTES, "UTF-8"); ?></b> 
    
  • एक यूआरएल के अंदर:

    $url = '?foo='.urlencode('bar'); 
    
18

यह सही है। हालांकि - htmlspecialchars ठीक है, जब तक आप सीधे अपने वर्णमाला प्राप्त करते हैं। आपको वैसे भी क्या करना चाहिए। तो मैं इसका उपयोग करता हूं, इसलिए अगर मैं इसे गड़बड़ कर दूंगा तो मुझे जल्दी पता चल जाएगा।

यह भी ध्यान दें कि यदि आप एक HTML संदर्भ में यूआरएल डालते हैं (कहें - a -tag के href में), तो आपको इससे बचने की आवश्यकता है।

echo "<a href='" . htmlspecialchars("?foo=".urlencode($foo)) . "'>clicky</a>" 
+0

महान जवाब। यह एक उदाहरण है कि संदर्भ के लिए किसी अन्य संदर्भ में कैसे बचें। यह ध्यान रखना महत्वपूर्ण है कि भले ही urlencode किसी भी समस्या का कारण बनने के लिए कभी भी किसी भी विशेष HTML वर्ण का उत्पादन नहीं करेगा, लेकिन यह पूरे HTML विशेषता सामग्री से बचने में कोई दिक्कत नहीं करता है। – Phil