用C#解码HTML文本
本文关键字:文本 HTML 解码 | 更新日期: 2023-09-27 18:24:29
我有一个助手方法:
public static string StripHtml(this string text)
{
text = HttpUtility.HtmlDecode(text);
text = Regex.Replace(text, @"<(.|'n)*?>", "");
return text;
}
还有一个单元测试:
[Test]
public void StripHtmlConvertsNbspEntityIntoSpace()
{
string result = "A B".StripHtml();
Assert.AreEqual("A B", result);
}
当我运行单元测试时,它失败了,并出现以下错误:
String lengths are both 3. Strings differ at index 1.
Expected: "A B"
But was: "A B"
------------^
所以我的问题是,为什么
没有被解码成一个空间字符?
amp;nbsp被解码成一个不间断的空格字符,而不是空格字符,为用户查找相同但却是另一个字符。
如果你按alt+255,这是不间断空格alt+32,如果你想看的话,这是标准空格。
您可以保存文本输出,并在十六进制编辑器中查看它,在那里您应该注意到它得到了另一个十六进制值,而不是普通空间
;是一个不同于空间的角色。单元测试正确。看见http://en.wikipedia.org/wiki/Space_character
HTML实体;不代表一个空间,它代表一个不间断的空间。不间断空格具有字符代码160:string nbspace="''u00A0";
不间断空间根本不是空间,所以如果你想要一个空间,你必须替换它
var text = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode("A B"));
text = Regex.Replace(text, @"<(.|'n)*?>", "");
byte[] c = Encoding.ASCII.GetBytes(text.ToString());
byte[] x = Encoding.ASCII.GetBytes("A B");