ฉันจะหลีกเลี่ยงข้อความสำหรับ html ที่ใช้ใน C # ได้อย่างไร ฉันต้องการที่จะทำ
sample="<span>blah<span>"
และมี
<span>blah<span>
แสดงเป็นข้อความธรรมดาแทนที่จะเป็น blah เฉพาะกับส่วนแท็กของ html :( การใช้ C # ไม่ใช่ ASP
ฉันจะหลีกเลี่ยงข้อความสำหรับ html ที่ใช้ใน C # ได้อย่างไร ฉันต้องการที่จะทำ
sample="<span>blah<span>"
และมี
<span>blah<span>
แสดงเป็นข้อความธรรมดาแทนที่จะเป็น blah เฉพาะกับส่วนแท็กของ html :( การใช้ C # ไม่ใช่ ASP
คำตอบ:
using System.Web;
var encoded = HttpUtility.HtmlEncode(unencoded);
นอกจากนี้คุณสามารถใช้สิ่งนี้ได้หากคุณไม่ต้องการใช้System.Web
ชุดประกอบ:
var encoded = System.Security.SecurityElement.Escape(unencoded)
ตามบทความนี้ความแตกต่างระหว่างSystem.Security.SecurityElement.Escape()
และSystem.Web.HttpUtility.HtmlEncode()
คืออดีตยังเข้ารหัส(')
อักขระอะพอสทรอฟี
SecurityElement.Escape()
Escape สำหรับXMLซึ่งไม่ใช่ HTML อย่างแน่นอน
หากคุณใช้. NET 4 ขึ้นไปและคุณไม่ต้องการอ้างอิงSystem.Web
คุณสามารถใช้WebUtility.HtmlEncode
จากSystem
var encoded = WebUtility.HtmlEncode(unencoded);
นี้มีผลเช่นเดียวกับและควรจะต้องการมากกว่าHttpUtility.HtmlEncode
System.Security.SecurityElement.Escape
ยังไม่มีใครพูดถึงใน 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- asp-net-mvc-2.aspx
.NET 4.0 ขึ้นไป:
using System.Web.Security.AntiXss;
//...
var encoded = AntiXssEncoder.HtmlEncode("input", useNamedEntities: true);
คุณสามารถใช้แท็ก html จริง<xmp>
และ</xmp>
เพื่อส่งออกสตริงตามที่แสดงแท็กทั้งหมดระหว่างแท็ก xmp
หรือคุณสามารถใช้บนเซิร์ฟเวอร์Server.UrlEncode
หรือHttpUtility.HtmlEncode
.
ไม่เห็นสิ่งนี้ที่นี่
System.Web.HttpUtility.JavaScriptStringEncode("Hello, this is Satan's Site")
มันเป็นสิ่งเดียวที่ใช้ได้ผล (asp 4.0+) เมื่อจัดการกับ html เช่นนี้ '
ได้รับการแสดงผลเป็น'
(ใช้ htmldecode) ใน html ที่ก่อให้เกิดการล้มเหลว:
<a href="article.aspx?id=268" onclick="tabs.open('modules/xxx/id/268', 'It's Allstars'); return false;">It's Allstars</a>
มีอักขระเครื่องหมายคำพูดพิเศษบางตัวที่ HtmlEncode ไม่ได้ลบออกและจะไม่แสดงใน Edge หรือ IE อย่างถูกต้องเช่น” และ“ คุณสามารถแทนที่อักขระเหล่านี้ด้วยฟังก์ชันด้านล่าง
private string RemoveJunkChars(string input)
{
return HttpUtility.HtmlEncode(input.Replace("”", "\"").Replace("“", "\""));
}
สำหรับผู้ที่กำลังมองหาวิธีง่ายๆในการทำเช่นนี้ในหน้า Razor ให้ใช้ดังต่อไปนี้:
ใน. cshtml:
@Html.Raw(Html.Encode("<span>blah<span>"))
ใน. cshtml.cs:
string rawHtml = Html.Raw(Html.Encode("<span>blah<span>"));