允许日文字符绕过C#的HtmlEncode方法

时间:2011-04-05 13:33:51

标签: c# asp.net html unicode character-encoding

我需要在表单(其网站采用UTF-8编码)中清除恶意内容的数据,所以我正在执行以下操作:

myTextBox.Value = System.Web.HttpUtility.HtmlEncode(value);其中value是要放置在TextBox中的数据。

这可以正确清除恶意数据(如Javascript调用),但也会将日语字符转换为其等效的UTF-8,例如愛

有没有办法跳过这些字符进行编码,比如某种范围?

2 个答案:

答案 0 :(得分:1)

HTML字符引用字符序列愛(即八个单字节&#248,表示Unicode代码点的59;在其传统的ASCII值中)与表示相同代码的UTF-8编码的UTF-8字节序列不同点(即4个十六进制字节0xF0 0xA4 0xA1 0x99)。

http://people.w3.org/rishida/tools/conversion/

正在发生哪一个?

这个简单的控制台应用程序显示常规的Unicode代码点(假设它们不代表像HTML一样的转义需要的东西,如<)不会被翻译:

using System;
using System.Web;

namespace ConsApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int lp = 0;
            string[] Inputs = {"\U00024859", "<tag>\U00024859<\\tag>"};
            foreach (var Test in Inputs)
            {
                string HTML = HttpUtility.HtmlEncode(Test);
                Console.WriteLine(String.Format(HTML != Test ? "String {0} Changed" : "String {0} Unchanged", lp));
                lp++;
            }
        }
    }
}

您的问题是文本已经转换为字符引用序列,并且HTML-Encode假设您要查看&amp;字符。就像我的第二个例子一样,&lt;转换为&lt;

答案 1 :(得分:1)

也许这对你来说不再是一个问题,但我遇到了同样的问题并找到了一个我认为应该与你分享的解决方案。

HttpUtility类有一个名为HtmlAttributeEncode的方法,它只编码引号(“),&符号(&amp;)和左尖括号(&lt;)。

http://msdn.microsoft.com/en-us/library/wdek0zbf.aspx