2012-11-26 53 views
11

直到現在我還在想着HttpUtility.HtmlDecode(" ")是一個空間。但下面的代碼總是返回false。html編碼空間的html解碼不是空間

string text = " "; 

text = HttpUtility.HtmlDecode(text); 

string space = " "; 

if (String.Compare(space, text) == 0) 
    return true; 
else 
    return false; 

同樣的,當我嘗試用Server.HtmlDecode()

爲什麼會這樣呢?

任何幫助,將不勝感激

感謝, ñ

+1

除了不換行空格,'你不應該用比較的方法來測試相等(即,明確查找的返回值0而不考慮一個字符串是否小於或大於另一個)。相反,要確定兩個字符串是否相等,請使用StringEquals(String,String,StringComparison)方法。 - http://msdn.microsoft.com/en-us/library/fbh501kz.aspx – Habib

+2

@Habib或更簡單,在大多數情況下,只是'=='。 –

回答

13

的HTML實體 並不代表一個空間,它代表了非換空間。

非打破空間有字符代碼160:

string nbspace = "\u00A0"; 

此外,正如馬克Gravell注意到,你有雙重編碼的代碼,那麼你就需要把它兩次解碼得到的字符:

string text = " "; 
text = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(text)); 
+0

查看http://en.wikipedia.org/wiki/Non-breaking_space獲取更多相關信息。 – Lloyd

+0

「& nbsp;」我補充說,假設這個頁面在我提交問題時將它視爲空間。沒關係 。我會嘗試編輯 – user1481853

+0

感謝您的回覆。好了,現在我想要的是將' '的HtmlDecode作爲正常空間返回。我應該怎麼做?除了String.Replace以外的其他任何方式? – user1481853

2

 的HTML並不意味着任何種空間。它的字面意思是文本  - 例如,如果您在編寫HTML時正在討論HTML,則可能需要包含文本 ,您可以通過編寫HTML  來完成該操作。

如果您有:

string text = " "; 

然後將解碼爲非破空間。

2

我清潔像這樣的html:

var text = WebUtility.HtmlDecode(html) 
     .Replace("\u00A0", " ") // Replace non breaking space with space. 
     .Replace(" ", " ") // Shrink multiple spaces into one space. 
     .Trim();