ฉันจะถอดรหัสอักขระ HTML ใน C # ได้อย่างไร


397

ฉันมีที่อยู่อีเมลที่เข้ารหัสด้วยเอนทิตีอักขระ HTML มีอะไรใน. NET ที่สามารถแปลงเป็นสตริงธรรมดาได้หรือไม่?

คำตอบ:


618

คุณสามารถใช้ได้ HttpUtility.HtmlDecode

หากคุณกำลังใช้. NET 4.0+ คุณสามารถใช้WebUtility.HtmlDecodeซึ่งไม่ต้องการการอ้างอิงแอสเซมบลีพิเศษเนื่องจากมีอยู่ในSystem.Netเนมสเปซ


1
มันควรจะอยู่ใน System.Web แต่ไม่ใช่ ฉันไม่ได้แตะ C # มานานกว่าหนึ่งปีถ้าฉันหงุดหงิดกับเรื่องนี้มากขึ้นฉันจะแปลงมันด้วยตนเอง
Vasil

1
มันอยู่ในรุ่น NET 2.0 ของ System.Web
มาร์ค Cidade

1
ฉันใช้ System.Web ในบริบทของฉันที่เนมสเปซมีคลาส AspPermission เพียงบางคลาสเท่านั้น
Vasil

17
เพิ่มการอ้างอิงถึง System.Web.Dll ในคุณสมบัติโครงการของคุณ ชั้นเรียนที่คุณเห็นอยู่ใน System.dll ซึ่งอ้างอิงโดยค่าเริ่มต้น
OwenP

11
ในกรณีที่คุณกำลังพยายามถอดรหัสสตริงข้อความค้นหาคุณต้องใช้HttpUtility.UrlDecode
PeterX

189

บน. Net 4.0:

System.Net.WebUtility.HtmlDecode()

ไม่จำเป็นต้องมีชุดประกอบสำหรับโครงการ C #


6
เป็นวิธีที่ดีกว่าเนื่องจาก HttpUtility ไม่ได้ถอดรหัส "& apos;" สัญลักษณ์ .. ฉันไม่รู้ว่าทำไม ..
RredCat

จำเป็นต้องมีการพัฒนาแพลตฟอร์ม Universal Windows
matthewsheets

สิ่งนี้จะทำให้ XSS ในหน้าเว็บ. Net หรือไม่
Senura Dissanayake

43

ตามที่ @CQ พูดว่าคุณต้องใช้HttpUtility.HtmlDecodeแต่ไม่สามารถใช้ได้ในโครงการที่ไม่ใช่ ASP .NET ตามค่าเริ่มต้น

สำหรับโปรแกรมประยุกต์ที่ไม่ใช่ ASP .NET System.Web.dllคุณจำเป็นต้องเพิ่มการอ้างอิงถึง คลิกขวาที่โครงการของคุณใน Explorer โซลูชันเลือก "เพิ่มการอ้างอิง" System.Web.dllจากนั้นเรียกดูรายการสำหรับ

หลังจากที่มีการเพิ่มการอ้างอิงคุณควรจะสามารถเข้าถึงวิธีการโดยใช้ชื่อที่ผ่านการรับรองSystem.Web.HttpUtility.HtmlDecodeหรือแทรกusingคำสั่งSystem.Webเพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้น


16

ถ้าไม่มีบริบทของเซิร์ฟเวอร์ (เช่นออฟไลน์ทำงานของคุณ) คุณสามารถใช้HttpUtility HtmlDecode


1
เห็นด้วยนั่นคือเหตุผลที่ฉันใช้ HttpUtility ตกหลุมพรางเดียวกัน = P
Quintin Robinson

7

ใช้Server.HtmlDecodeเพื่อถอดรหัสเอนทิตี HTML หากคุณต้องการที่จะหลบหนี HTML คือแสดง<และตัวละครให้กับผู้ใช้ใช้งาน>Server.HtmlEncode


4
อาจไม่มีบริบทของเซิร์ฟเวอร์ (เช่นเมื่อใช้กรณีทดสอบและชอบ) ฉันตกหลุมดักนี้ก่อน :)
ร็อบคูเปอร์

7

ในการถอดรหัส HTML ลองดูโค้ดด้านล่าง

string s = "Svendborg V&#230;rft A/S";
string a = HttpUtility.HtmlDecode(s);
Response.Write(a);

ผลผลิตก็เหมือนกัน

 Svendborg Værft A/S

2
'ToString ()' ซ้ำซ้อนเนื่องจาก HtmlDecode ส่งคืนสตริง
Justin

6

นอกจากนี้ยังเป็นมูลค่าการกล่าวขวัญว่าถ้าคุณกำลังใช้ HtmlAgilityPack HtmlAgilityPack.HtmlEntity.DeEntitize()เหมือนผมคุณควรใช้ มันต้องใช้เวลาและผลตอบแทนstringstring


1

เขียนวิธีการแบบสแตติกลงในคลาสยูทิลิตี้บางอย่างซึ่งยอมรับสตริงเป็นพารามิเตอร์และส่งคืนสตริง html ที่ถอดรหัส

รวมusing System.Web.HttpUtilityไว้ในชั้นเรียนของคุณ

public static string HtmlEncode(string text)
    {
        if(text.length > 0){

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

สำหรับ. net 4.0

เพิ่มการอ้างอิงถึงSystem.net.dllโครงการด้วยusing System.Net;จากนั้นใช้ส่วนขยายต่อไปนี้

// Html encode/decode
    public static string HtmDecode(this string htmlEncodedString)
    {
        if(htmlEncodedString.Length > 0)
        {
            return System.Net.WebUtility.HtmlDecode(htmlEncodedString);
        }
        else
        {
            return htmlEncodedString;
        }
    }

    public static string HtmEncode(this string htmlDecodedString)
    {
        if(htmlDecodedString.Length > 0)
        {
            return System.Net.WebUtility.HtmlEncode(htmlDecodedString);
        }
        else
        {
            return htmlDecodedString;
        }
    }

0

สำหรับสตริงที่มี & # x20; ฉันต้องถอดรหัสสตริงเป็นสองเท่า การถอดรหัสครั้งแรกจะทำให้มันกลายเป็นรหัสผ่านที่สองอย่างถูกต้องจะถอดรหัสมันเป็นตัวละครที่คาดหวัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.