जवाबों:
मेरे पास टिप्पणी विशेषाधिकार नहीं हैं, या मैंने इसे पहले के उत्तर पर टिप्पणी के रूप में छोड़ दिया होगा।
नहीं, मैं दोहराता हूं, HTML का उपयोग करके एक एपॉस्ट्रॉफी से बच नहीं
'
यह एक मान्य HTML चरित्र इकाई संदर्भ नहीं है। यह एक XML चरित्र इकाई संदर्भ है। जबकि फ़ायरफ़ॉक्स और क्रोम, कम से कम, एक HTML दस्तावेज़ में एपोस्ट्रोफ के रूप में उपरोक्त प्रस्तुत करेगा, इंटरनेट एक्सप्लोरर नहीं करेगा। और यह मानक का पालन कर रहा है जब वह ऐसा करने से इनकार करता है।
आप HTML का उपयोग करके एक एपॉस्ट्रॉफी से बच सकते हैं
'
लेकिन मेरा मानना है कि यह आवश्यक नहीं है।
http://fishbowl.pastiche.org/2003/07/01/the_curse_of_apos/
http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
मैं नैट से सहमत नहीं हूं। आपको आदर्श रूप से यथासंभव बच निकलने का उपयोग करना चाहिए और वर्णों को मूल रूप से व्यक्त करने के लिए UTF-8 का उपयोग करना चाहिए। ऐसा करने के लिए आपको एक संपादक की आवश्यकता होती है जो UTF-8 और साथ ही एक सही चारसेट घोषणा को भी संभाल सके, जैसे:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
हालाँकि, आपको उन पात्रों से बचने की आदत डालनी चाहिए जिनका HTML (X) में एक विशेष अर्थ है:
< <
> >
" "
& &
' '
यह सुनिश्चित करेगा कि आप गलती से मार्कअप नहीं लिख रहे हैं जब आप इन अक्षरों को लिखना चाहते हैं। सुरक्षा बनाए रखने के लिए, उपयोगकर्ता इनपुट के लिए यह विशेष रूप से महत्वपूर्ण है। यह कम स्पष्ट है, लेकिन वास्तव में बच निकलना महत्वपूर्ण है "
। यदि कोई स्ट्रिंग कभी भी HTML विशेषता ( title="something"
आदि) में समाप्त होती है, तो उपयोगकर्ता विशेषता को समाप्त कर सकता है और अपना स्वयं का मार्कअप डाल सकता है। कल्पना करें कि यदि उपयोगकर्ता प्रवेश करता है " onclick="alert('hello');
और आप उसे सम्मिलित करते हैंtitle="..."
यदि आप PHP का उपयोग कर रहे हैं, तो आप ऐसा करने के लिए htmlspecialchars
फ़ंक्शन का उपयोग कर सकते हैं । अन्य भाषाओं में अन्य समान कार्य हो सकते हैं।
अद्यतन: मैं apos मुद्दे पर सही खड़ा हूँ। शापित pesky IE।
'
न करें '
। यदि, जो भी कारण से, आप एक HTML विशेषता के लिए एकल उद्धरण का उपयोग करते हैं, जैसे title='something'
कि आप उस विशेषता मूल्य के अंदर किसी भी एक उद्धरण से बचना चाहिए।
यह आपके उपयोग के मामले पर निर्भर करता है, लेकिन हमें '
आमतौर पर प्राकृतिक भाषा में उपयोग करने से हतोत्साहित किया जाना चाहिए , इसलिए समस्या तब तक नहीं उठनी चाहिए जब तक कि आपके XML में कंप्यूटर कोड न हो।
जहां हमारे पास अनुवादित स्ट्रिंग्स हैं, हम पाते हैं कि कुछ अनुवादक समापन उद्धरण को यूनिकोड घुंघराले उद्धरणों के साथ बदल देते हैं, लेकिन सीधे उद्धरणों को शुरुआती उद्धरणों के रूप में छोड़ देते हैं, जिससे वे नेत्रहीन असंतुलित और अप्रभावी दिखते हैं।
यूनिकोड वर्ण ‘
और ’
बदल दिया जाना चाहिए '
जहां संभव हो, उतना ही “
और ”
बदल दिया जाना चाहिए "
। यह उपयोगी है क्योंकि कंप्यूटर विशेष रूप से घुंघराले विराम चिह्न को नहीं पहचानते हैं। (हालांकि, मुझे यह देखकर आश्चर्य होता है कि स्टैक ओवरफ्लो / क्रोम ' don’t
' को वर्तनी की त्रुटि मानता है , जबकि यह 'से खुश है don't
'।)
यह मदद नहीं करता है कि हमारे पास कीबोर्ड पर बहुत मोहक '
और "
पात्र हैं।
तो चलो देखते हैं कि क्या StackExchange स्वयं एक HTML इकाई का उपयोग करके एक एपोस्ट्रोफ को एन्कोड करता है।
इस पृष्ठ के स्रोत कोड से कुछ उदाहरण यहां दिए गए हैं।
(१) प्रश्न शीर्षक: एनकोडेड।
Should I escape the Apostrophe ( ' ) character with its HTML entity (&#39;)?
(२) आकर्षित करने का उत्तर: एनकोडेड नहीं।
But I don't believe it is, in general, necessary.
(3) नाइट्रो 2k01 के जवाब पर टॉम की टिप्पणी: एनकोडेड।
I've got two contradicting answers now. One recommends escaping ' and the other does not. What should I believe?
तो यह दोनों तरह से जाता है।
हालाँकि, इस पृष्ठ का स्रोत कोड कभी उपयोग नहीं करता है '
। सभी एनकोडिंग फॉर्म के हैं '
। यह नाइट्रो 2k01 के अनुरूप है और ड्रू की सलाह का उपयोग नहीं करना है '
।
आपका उत्तर संदर्भ पर निर्भर करता है:
यदि आप इस डेटा के साथ HTML में एक पैराग्राफ लिख रहे हैं, तो यह <,> और & से बचने के लिए पर्याप्त हो सकता है:
<p>{string}</p>
यदि आप एक HTML विशेषता में लिख रहे हैं, हालांकि, पसंद है
<a href='/some/path/{string}'>...</a>
तब आपको सर्वनाश से बच जाना चाहिए। यह एक हमला वेक्टर हो सकता है अगर एक हमलावर ने इसे अंदर रखा string
:
string = "' onmouseover='alert(\"nasty script here!\")' data-ignore='"
एक ही बात डबल कोट्स के लिए जाती है। मैंने यह भी पढ़ा है कि backtick `असुरक्षित है, क्योंकि इसका उपयोग HTML विशेषताओं के लिए भी किया जा सकता है। यदि आपके पास आपकी नियत दिनचर्या के भाग के रूप में एक स्वचालित HTML वाक्यविन्यास जाँच स्क्रिप्ट नहीं है, तो मान लें कि इन तीनों में से किसी का भी उपयोग किया जा सकता है, और HTML विशेषताओं के लिए बच जाना चाहिए।
चरम पर, यहां तक कि निर्विवाद गुण मान्य हैं, इसलिए अंतरिक्ष चरित्र को भी भागने की आवश्यकता होगी। और !
, @
, $
, %
, (
, )
, =
, +
, {
, }
, [
, और ]
, जो सभी की एक विशेषता को तोड़ने और एक नया एक डालने की अनुमति दे सकते।
जावास्क्रिप्ट में भागने के लिए, मैं JQuery का उपयोग करता हूं $(element).text(string)
या $(element).attr(attrname, string)
मेरे लिए भागने के लिए करता हूं। बहुत सावधान रहें $(element).html(unsafe)
, जो आपके HTML से नहीं बचता है!
सर्वर-साइड कोड पर, मुझे प्रत्येक मामले के लिए जोखिम का सावधानीपूर्वक मूल्यांकन करना होगा और प्रलेखन को ध्यान से पढ़ना होगा। यह आपके द्वारा उपयोग की जा रही विशेष भाषा और पुस्तकालयों पर निर्भर करेगा, जैसे रेल, Django, कच्ची PHP, Drupal, आदि।
यदि आप समस्या को जल्द से जल्द रोकने पर विचार कर रहे हैं, तो इससे पहले कि यह आपके डेटाबेस में आए, अपने घोड़ों को पकड़ें। HTML- अपने DB में संग्रहीत पाठ से बचकर आपको एक नारकीय सवारी पर ले जा सकता है। क्या होगा अगर आप बाद में कुछ HTML टैग्स की अनुमति देना चाहते हैं, लेकिन अन्य नहीं, जैसे इटैलिक, बोल्ड, रंग और टेबल? क्या होगा यदि आप अपने पहले पास में कुछ याद करते हैं, लेकिन आपका एस्कैपर पहले से &
ही &
और के "
रूप में बच गया "
? यह उन में बदल जाएगा &amp;
और &quot;
?
मेरा दृष्टिकोण केवल डेटाबेस के लिए एसक्यूएल से बचने के लिए है, लेकिन बाद के प्रसंस्करण के लिए सभी HTML विशेष वर्णों को छोड़ दें। इस तरह, मैं अपने HTML को डीबग और फाइन-ट्यून कर आसानी से बच सकता हूं। मन, इसका मतलब यह भी है कि मैं अपने स्वयं के एसक्यूएल तालिकाओं पर भरोसा नहीं कर सकता, अगर उनके पास उपयोगकर्ता-प्रदान तार हैं।
कभी भी उपयोगकर्ता-नियंत्रित इनपुट पर भरोसा न करें, और हमेशा अपने HTML विशेषताओं को उद्धृत करें!
इसके आधार पर: HTML से कहीं अधिक पलायन है, <,>, और " रयान ग्रोव द्वारा "
यदि आपका एपॉस्ट्रॉफ़ सामग्री से संबंधित है, तो इसे छोड़ दें। कोई भी अन्य सामग्री वर्ण जो कोड के साथ भ्रमित हो सकता है, उससे बच सकते हैं।
वास्तविक इकाई का उपयोग किए बिना नौकरी करने का सबसे आसान तरीका PHP htmlentities()
या htmlspecialchars()
कार्यों का उपयोग करना है:
$val = htmlspecialchars("Don't", ENT_QUOTES, 'UTF-8');
if($_POST){
$val = htmlspecialchars(trim($_POST['val']), ENT_QUOTES, 'UTF-8');
}
echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en' class='njs'>
<head>
<meta http-equiv='Content-type' content='text/html;charset=utf-8' />
<title>Special Characters</title>
<style type='text/css'>
@import 'special.css';
</style>
</head>
<body>
<form method='post' action='' id='fm' name='fm'>
<input type='text' value='$val' name='val' id='val' />
<input type='submit' value='submit' name='sub' id='sub' />
</form>
</body>
<script type='text/javascript' src='special.js'></script>
</html>";
&apos
है कि विकिपीडिया लेख अब एचटीएमएल 5 से मान्य है। कहा जा रहा है कि अगर आपको आउटलुक के लिए लीगेसी ब्राउजर्स का समर्थन करना है या एचटीएमएल ईमेल लिखना है तो आप सबसे अच्छे से चिपके हुए हैं'
यदि आप चरित्र से बचने के लिए आवश्यक हैं।