2016-02-17 9 views
0

Я хочу декодировать HTML или тексты. Я использовал -с то же result- эти функции:Декодирование всех объектов HTML сразу

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

Например, когда я хотел декодировать Martian's atmosphere, Я получаю Martian's atmosphere вместо .

И когда я использую этот код (ехр), все правильно (символы декодируются):

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

Проблема заключается в том, я не хотел бы использовать циклы, потому что иногда я должен декодировать полная HTML-страница или длинные тексты.

Thank's.

+0

Так вы говорите, вы должны запустить строку через HtmlDecode дважды, прежде чем он полностью декодированного? – Dave

+0

'HttpUtility.HtmlDecode' Кажется, что работает: https://dotnetfiddle.net/CVJUxQ –

+0

Да. Мне нужно запустить HtmlDecode больше. Если одно слово имеет 3 кодированных объекта, я должен запустить HtmlDecode 3 раза. – 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

 Смежные вопросы

  • Нет связанных вопросов^_^