使用LINQ的HTMLDecode字符串数组

时间:2014-04-24 10:51:07

标签: c# linq

如何使用string[]解码LINQ

例如。我从string而不是Institute's

获取string[] Institute's values.ForEach(item => WebUtility.HtmlDecode(item));

我试过了,

values

其中string[]是我的Institution's ..

我仍然无法获得理想的结果。

修改

如上图所示我的原始字符串为Institute's,我将其作为编码

Institute's ---->第一级编码

Institute's ---->二级编码

应用以下解决方案后,我能够将结果解码的第一级编码作为

Institute's

但无法获取实际字符串{{1}}

3 个答案:

答案 0 :(得分:0)

您没有看到任何更改的原因是WebUtility.HtmlDecode没有为您传递的参数赋值,而是返回html解码值。

    String encodedString = "&";

    //this does nothing
    WebUtility.HtmlDecode(encodedString);

    //this assigns the decoded value to a new string
    String decodedString = WebUtility.HtmlDecode(encodedString);

这也是为什么(正如Henrik所说)你应该在你的linq查询中使用Select

您可以这样使用它:

values = values.Select(item => WebUtility.HtmlDecode(item));

答案 1 :(得分:0)

此代码剪辑为我工作:

string[] values = new string[] {
    "Institute's",
    "Institute's",
    "Institute's",
    "Institute's",
    "Institute's"};

List<string> decoded = new List<string>();
Regex encDet = new Regex(@"\&.+;", RegexOptions.Compiled|RegexOptions.IgnoreCase);

values.ToList().ForEach(item => {
string decodedItem = item;
while(encDet.IsMatch(decodedItem)){
        decodedItem = WebUtility.HtmlDecode(decodedItem);
}
decoded.Add(decodedItem);
});
values = decoded.ToArray();

修改

如果你只需要纯粹的&#34; LINQ只会解码双编码字符串,这是另一个单行代码段:

values = values.Select(item => WebUtility.HtmlDecode(WebUtility.HtmlDecode(item))).ToArray();

干杯!

答案 2 :(得分:0)

var decodedValues = HtmlDoubleDecode(values);   

HtmlDoubleDecode是:

public string[] HtmlDoubleDecode(string[] values)
{
    return values
        .Select (v => WebUtility.HtmlDecode(WebUtility.HtmlDecode(v)))
        .ToArray();
}