HTML के लिए पाठ से बच


136

मैं सी # में html उपयोग के लिए पाठ से कैसे बचूँ? मैं करना चाहता हूँ

sample="<span>blah<span>"

और है

<span>blah<span>

केवल html: टैग के भाग के साथ ब्ला के बजाय सादे पाठ के रूप में दिखाएं

c#  html  escaping 

जवाबों:


185
using System.Web;

var encoded = HttpUtility.HtmlEncode(unencoded);

3
यदि आप यूनिकोड वर्णों को गैर-यूनिकोड में बदलना चाहते हैं, तो इसे देखें: stackoverflow.com/questions/82008/…
Gyuri

4
कुछ ऐसा जिसे आप खराब तरीके से नहीं ढूंढना चाहते हैं: उपरोक्त विधि अपने आप में नियंत्रण पात्रों से बचती नहीं है। यहां स्वीकृत उत्तर देखें: stackoverflow.com/a/4501246/1543677 और दोनों का उपयोग करें।
pkExec

HttpUtility अब मौजूद नहीं है (स्टोर एप्स
जीतें

82

यदि आप System.Webअसेंबली का उपयोग नहीं करना चाहते हैं, तो भी आप इसका उपयोग कर सकते हैं :

var encoded = System.Security.SecurityElement.Escape(unencoded)

प्रति इस अनुच्छेद , के बीच का अंतर System.Security.SecurityElement.Escape()और System.Web.HttpUtility.HtmlEncode()है कि पूर्व भी apostrophe encodes है (')अक्षर।


7
एक्सएमएल केSecurityElement.Escape() लिए भागने का नहीं कहना जो कि एचटीएमएल नहीं है।
विक्टर सर्जेनको

System.Security.SecurityElement विंडोज़ स्टोर ऐप में मौजूद नहीं है
टर्टियम

47

आप या इसके बाद के संस्करण .NET 4 का उपयोग कर रहे हैं और आप संदर्भ के लिए नहीं करना चाहते हैं System.Web, तो आप उपयोग कर सकते हैं WebUtility.HtmlEncodeसेSystem

var encoded = WebUtility.HtmlEncode(unencoded);

यह उसी तरह का प्रभाव है HttpUtility.HtmlEncodeऔर इसे अधिक पसंद किया जाना चाहिए System.Security.SecurityElement.Escape


SecurityElement.Escape पर इसे क्यों प्राथमिकता दी जानी चाहिए? क्या उत्तरार्द्ध में कमजोरियां हैं, या पूर्व सिर्फ अधिक सक्षम है?
ट्रैविस

7
@Travis दोनों में कोई भेद्यता नहीं है, यह सिर्फ SecurityElement.EscapeXML पर संचालित होता है और HtmlEncodeHTML पर काम करता है, और XML और HTML एन्कोडिंग की कुछ अलग आवश्यकताएँ हैं ( विवरण के लिए इस उत्तर को देखें)। इसलिए, उदाहरण के लिए, SecurityElement.Escapeउपयोग करने की अनुमति है &apos;, जबकि HtmlEncodeऐसा नहीं है।
एलेक्स

1
@ मुझे लगता है कि इससे भी बेहतर "बहाना" यह है कि System.Net पोर्टेबल क्लास लाइब्रेरी के लिए उपलब्ध है और अन्य दो विकल्प आज सुबह नहीं हैं। ; ^)
रफिन

19

किसी ने अभी तक उल्लेख नहीं किया है, ASP.NET 4.0 में ऐसा करने के लिए नया सिंटैक्स है। के बजाय

<%= HttpUtility.HtmlEncode(unencoded) %>

आप बस कर सकते हैं

<%: unencoded %>

यहाँ और अधिक पढ़ें: http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and- एएसपी निवल MVC-2.aspx


1
कृपया रेजर के लिए एक सिंटैक्स दें? @ नाच

6

.NET 4.0 और ऊपर:

using System.Web.Security.AntiXss;
//...
var encoded = AntiXssEncoder.HtmlEncode("input", useNamedEntities: true);

5

आप वास्तविक HTML टैग्स का उपयोग कर सकते हैं <xmp>और </xmp>स्ट्रिंग को आउटपुट करने के लिए है जैसे कि xmp टैग्स के बीच में सभी टैग दिखाने के लिए।

या आप सर्वर पर भी उपयोग कर सकते हैं Server.UrlEncodeया HttpUtility.HtmlEncode


मैंने सवाल को और स्पष्ट कर दिया। मैं नहीं चाहता कि टैग HTML का हिस्सा हों क्योंकि उपयोगकर्ता </ pre> कर सकता है और इसे तोड़ सकता है।

महान पोस्ट धन्यवाद आदमी यह तय मैं वास्तव में क्या देख रहा था!
Spets

1
<xmp>बहुत पहले ही पदावनत कर दिया गया है: stackoverflow.com/questions/8307846/…<pre> इसके बजाय उपयोग करें
17'18

1

यहाँ यह नहीं देखा

System.Web.HttpUtility.JavaScriptStringEncode("Hello, this is Satan's Site")

यह केवल ऐसी चीज थी जो HTML के साथ काम करते समय (asp 4.0+) काम करती थी। &apos;के रूप में प्रदान किया जाता है 'html में (htmldecode का प्रयोग करके), विफल इसका कारण:

<a href="article.aspx?id=268" onclick="tabs.open('modules/xxx/id/268', 'It&apos;s Allstars'); return false;">It's Allstars</a>

1

कुछ विशेष उद्धरण वर्ण हैं जिन्हें HtmlEncode द्वारा हटाया नहीं गया है और इसे “और” की तरह सही ढंग से Edge या IE में प्रदर्शित नहीं किया जाएगा। आप नीचे दिए गए फ़ंक्शन जैसे कुछ के साथ इन वर्णों को प्रतिस्थापित कर सकते हैं।

private string RemoveJunkChars(string input)
{
    return HttpUtility.HtmlEncode(input.Replace("”", "\"").Replace("“", "\""));
}

आप शायद गलत एन्कोडिंग का उपयोग करके सामग्री परोस रहे हैं। IE और एज को इस तरह के पात्रों को प्रदर्शित करने में कोई समस्या नहीं है।
बुके

0

भविष्य में रेजर पृष्ठों में ऐसा करने के लिए एक सरल तरीके की तलाश करने वालों के लिए, निम्नलिखित का उपयोग करें:

.Cshtml में:

@Html.Raw(Html.Encode("<span>blah<span>"))

.Cshtml.cs में:

string rawHtml = Html.Raw(Html.Encode("<span>blah<span>"));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.