2016-02-17 55 views
0

我想解碼HTML或文本。我 - 附相同result-使用此功能:一次解碼整個HTML實體

  • HtmlEntity.DeEntitize
  • HttpUtility.HtmlDecode
  • WebUtility.HtmlDecode

例如,當我喜歡解碼Martian's atmosphere,我得到Martian's atmosphere而不是

,當我使用這個代碼(EXP),一切都是正確的(字符解碼):

TextBox1.Text = "Martian's atmosphere" 
    For i = 0 To 2 
     TextBox1.Text = WebUtility.HtmlDecode(TextBox1.Text) 
     i += 1 
    Next 

問題是我不喜歡使用循環,因爲有時我不得不解碼完整的HTML頁面或長文本。

謝謝。

+0

所以你說你要貫穿HtmlDecode字符串前兩次它的完全解碼? – Dave

+0

'HttpUtility.HtmlDecode'似乎工作:https://dotnetfiddle.net/CVJUxQ –

+0

是的。我必須更多地運行HtmlDecode。如果一個單詞有3個編碼實體,我必須運行3次HtmlDecode。 – Tajrib

回答

1

聽起來好像你沒有任何方法可以預先知道一個字符串需要被解碼多少次,直到你得到你想要的結果,所以你將不得不使用循環或遞歸得到想要的結果。這裏是一個遞歸函數來做到這一點:

function DecodeUntilUnchanged(string str) 
{ 
    string decoded = WebUtility.HtmlDecode(str); 
    if(decoded == str) 
     return str; 
    return DecodeUntilUnchanged(decoded); 
} 

你會使用這樣的:

TextBox1.Text = DecodeUntilUnchanged(TextBox1.Text); 
+0

謝謝@Dave。這正是我想要的。你的代碼工作。 但是,我想知道爲什麼** WebUtility.HtmlDecode **不解碼整​​個單詞。 – Tajrib

+0

這首先取決於你在哪裏獲得這些字符串。這聽起來像你已經有東西''''作爲''''然後轉義'&'爲'&' – Dave