HTML/Url 解码多次编码的字符串

本文关键字:编码 字符串 Url 解码 HTML | 更新日期: 2023-09-27 17:56:21

我们有一个从网页读取的字符串。由于浏览器容忍未编码的特殊字符(例如 &符号),因此某些页面使用它进行编码,有些则不...所以有很大的可能性,我们存储了一些编码一次的数据,有些存储了多次......

是否有一些明确的解决方案,如何确定我的字符串无论编码多少次都足够解码?

以下是我们现在使用的内容:

public static string HtmlDecode(this string input)
{
     var temp = HttpUtility.HtmlDecode(input);
     while (temp != input)
     {
         input = temp;
         temp = HttpUtility.HtmlDecode(input);
     }
     return input;
}

与UrlDecode一起使用相同。

HTML/Url 解码多次编码的字符串

老实说,这可能是最好的方法。真正的解决方案是重新设计你的代码,这样你只在所有地方单独编码,这样你只能单独解码它们。

您的代码似乎正在正确解码 html 字符串,并进行多次检查。

但是,如果输入HTML格式不正确,即未正确编码,则解码将是意外的。 即无论通过此方法多少次,错误的输入都可能无法正确解码。

使用两个编码字符串

进行快速检查,一个使用完全编码的字符串,另一个使用部分编码的字符串,得出以下结果。

"&lt;b&gt;"将解码为"<b>"

"&lt;b&gt将解码为"<b&gt"

如果这对任何人都有帮助,这里有一个用于多个 HTML 编码字符串的递归版本(我发现它更容易阅读):

public static string HtmlDecode(string input) {
    string decodedInput = WebUtility.HtmlDecode(input);
    if (input == decodedInput) {
        return input;
    }
    return HtmlDecode(decodedInput);
}

WebUtility位于System.Net命名空间中。