2015-12-30 2 views
1

Я получил строку из HTML, как:Decode HTML строка, где амперсанды кодируются как \ x26

var htmlStr = " \\x26lt;span\\x26gt; \\x26lt;/span\\x26gt;"; 

Я не могу расшифровать его C# строки, как:

<span> </span> 

Если я изменяю строка до

var htmlStr = " \x26lt;span\x26gt; \x26lt;/span\x26gt;"; 

Это работает хорошо. Но как я могу это сделать, заменив строку или другие?

BTW, я использую Encoding.UTF8.

+0

Учитывая ваш пример, замена '\\ x' на' \ x' будет работать. Почему этого недостаточно? – npinti

+0

'htmlStr.Replace (" \\ x "," \ x ")'? – dotctor

+0

@npinti Я пробовал, но не работал. – MichaelMao

ответ

4

Вы делаете это, как этот

var htmlStr = "\\x26lt;span\\x26gt; \\x26lt;/span\\x26gt;"; 
// Take out the extra stars 
var result = Regex.Replace(htmlStr, @"\*\*([^*]*)\*\*", "$1"); 
// Unescape \x values 
result = Regex.Replace(htmlStr, 
       @"\\x([a-fA-F0-9]{2})", 
       match => char.ConvertFromUtf32(
        Int32.Parse(match.Groups[1].Value, 
        System.Globalization.NumberStyles.HexNumber))); 
// Decode html entities 
htmlStr = WebUtility.HtmlDecode(result); 

Выход есть

<span> </span> 
+0

Привет, @MohitShrivastava эта работа отлично, я могу решить эту проблему REG. Но кто-нибудь знает проблему декодирования? Всегда писать рег не является хорошим решением? – MichaelMao

1

Уже ответил здесь: How can I decode HTML characters in C#?

Короче говоря, вы можете использовать HttpUtility.HtmlDecode или WebUtility.HtmlDecode

+0

Я могу декодировать '\ x26lt;', но я не могу декодировать '\\ x26lt;' – MichaelMao

+0

Просто замените его: htmlStr.Replace ("\\\\ x", "\\ x"); – eocron