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 字符串,并进行多次检查。
但是,如果输入HTML格式不正确,即未正确编码,则解码将是意外的。 即无论通过此方法多少次,错误的输入都可能无法正确解码。
使用两个编码字符串进行快速检查,一个使用完全编码的字符串,另一个使用部分编码的字符串,得出以下结果。
"<b>"
将解码为"<b>"
"<b>
将解码为"<b>"
如果这对任何人都有帮助,这里有一个用于多个 HTML 编码字符串的递归版本(我发现它更容易阅读):
public static string HtmlDecode(string input) {
string decodedInput = WebUtility.HtmlDecode(input);
if (input == decodedInput) {
return input;
}
return HtmlDecode(decodedInput);
}
WebUtility
位于System.Net
命名空间中。