当前位置:  开发笔记 > 编程语言 > 正文

HttpUtility.HtmlEncode不编码所有内容

如何解决《HttpUtility.HtmlEncode不编码所有内容》经验,为你挑选了3个好方法。

我正在使用C#和.Net 3.5中的桌面客户端程序与Web服务器进行交互.我正在使用Fiddler来查看Web浏览器发送的流量,并模拟它.可悲的是,这台服务器已经很老了,对于charsets和utf-8的概念有点困惑.大多数情况下它使用Latin-1.

当我在包含"特殊"字符的Web浏览器中输入数据时,如"Ωπℵ♣♥♥♉♉♋♌♌♎♏♐♑♓♓",fiddler告诉我它们从浏览器传送到服务器如下: "♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ "

但对于我的客户端,HttpUtility.HtmlEncode不会转换这些字符,而是将它们保留为原样.我需要打电话将"♈"转换为♈ 等等?



1> AnthonyWJone..:

HtmlEncode的返回值类型是一个字符串,它是Unicode,因此不需要对这些字符进行编码.

如果输出流的编码与这些字符不兼容,那么使用HtmlEncode,如下所示: -

 HttpUtility.HtmlEncode(outgoingString, Response.Output);

然后HtmlEncode适当地转义字符.



2> bdukes..:

Rich Strahl刚刚发布了一篇博文,Html和Uri字符串编码,没有System.Web,他也有一些自定义代码,可以编码上面的字符范围.

/// 
/// HTML-encodes a string and returns the encoded string.
/// 
/// The text string to encode. 
/// The HTML-encoded text.
public static string HtmlEncode(string text)
{
    if (text == null)
        return null;

    StringBuilder sb = new StringBuilder(text.Length);

    int len = text.Length;
    for (int i = 0; i < len; i++)
    {
        switch (text[i])
        {

            case '<':
                sb.Append("<");
                break;
            case '>':
                sb.Append(">");
                break;
            case '"':
                sb.Append(""");
                break;
            case '&':
                sb.Append("&");
                break;
            default:
                if (text[i] > 159)
                {
                    // decimal numeric entity
                    sb.Append("&#");
                    sb.Append(((int)text[i]).ToString(CultureInfo.InvariantCulture));
                    sb.Append(";");
                }
                else
                    sb.Append(text[i]);
                break;
        }
    }
    return sb.ToString();
}


为什么159为截止?

3> Rick..:

这看起来非常低效,但我能想到的唯一方法是浏览每个角色:

public static string MyHtmlEncode(string value)
{
   // call the normal HtmlEncode first
   char[] chars = HttpUtility.HtmlEncode(value).ToCharArray();
   StringBuilder encodedValue = new StringBuilder();
   foreach(char c in chars)
   {
      if ((int)c > 127) // above normal ASCII
         encodedValue.Append("&#" + (int)c + ";");
      else
         encodedValue.Append(c);
   }
   return encodedValue.ToString();
}

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有