HtmlDecode html-кодированного пространства не является пространством
До сих пор я думал, что HttpUtility.HtmlDecode(" ")
- это пространство. Но ниже код всегда возвращает false.
string text = " ";
text = HttpUtility.HtmlDecode(text);
string space = " ";
if (String.Compare(space, text) == 0)
return true;
else
return false;
То же самое, когда я пытаюсь использовать Server.HtmlDecode()
Почему это так?
Любая помощь будет высоко оценена
Спасибо,
N
Ответы
Ответ 1
Объект HTML
не представляет пробел, он представляет собой неразрывное пространство.
Неразрывное пространство имеет код символа 160:
string nbspace = "\u00A0";
Кроме того, как заметил Марк Гравелл, вы дважды закодировали код, поэтому вам нужно будет его дважды декодировать, чтобы получить символ:
string text = " ";
text = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(text));
Ответ 2
HTML  
не означает любой вид пространства. Это означает, в буквальном смысле, текст
- например, если вы писали HTML, который говорил о HTML, вам может потребоваться включить текст
, который вы бы сделали, написав HTML  
.
Если у вас есть:
string text = " ";
то это будет декодироваться в не разбивающемся пространстве.
Ответ 3
Я очищаю html следующим образом:
var text = WebUtility.HtmlDecode(html)
.Replace("\u00A0", " ") // Replace non breaking space with space.
.Replace(" ", " ") // Shrink multiple spaces into one space.
.Trim();