0

我有一个辅助方法:

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&nbsp;B".StripHtml();
    Assert.AreEqual("A B", result);
}

当我运行单元测试时,它失败并出现以下错误:

 String lengths are both 3. Strings differ at index 1.
  Expected: "A B"
  But was:  "A B"
  ------------^

所以我的问题是,为什么&nbsp;没有解码成空格字符?

4

3 回答 3

1

  被解码为一个不间断的空格字符,而不是空格字符,查找用户相同但是另一个字符。

如果您按 alt+255 是不间断空格 alt+32 如果您想查看它是诺曼空格。

您可以保存文本输出并在十六进制编辑器中查看它,您应该注意到它有另一个十六进制值而不是普通空间

于 2013-07-23T07:48:23.147 回答
0

HTML 实体不代表一个空格,它代表一个不间断的空格。不间断空格的字符代码为 160: string nbspace = "\u00A0";

不间断的空间根本不是空间,所以如果你想要一个空间,你必须替换它

var text = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode("A&nbsp;B"));
text = Regex.Replace(text, @"<(.|\n)*?>", "");
byte[] c = Encoding.ASCII.GetBytes(text.ToString());
byte[] x = Encoding.ASCII.GetBytes("A B");
于 2013-07-23T08:26:45.757 回答
0

  是与空格不同的字符。单元测试是正确的。见http://en.wikipedia.org/wiki/Space_character

于 2013-07-23T07:49:30.617 回答