Разрешить японским символам обходить метод C # s HtmlEncode - PullRequest
0 голосов
/ 05 апреля 2011

Мне нужно очистить данные для вредоносного контента в форме (чей сайт имеет кодировку UTF-8), поэтому я делаю следующее:

myTextBox.Value = System.Web.HttpUtility.HtmlEncode(value);, где value - данные для размещения в текстовом поле.

Это правильно очищает вредоносные данные, такие как вызовы Javascript, но также превращает японские символы в их эквиваленты UTF-8, такие как 愛

Есть ли способ пропустить эти символы из кодированного, например, какой-нибудь диапазон?

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Возможно, это больше не проблема для вас, но у меня возникла та же проблема, и я нашел решение, которое, как мне казалось, я должен поделиться с вами.

В классе HttpUtility есть метод HtmlAttributeEncode, который будет кодировать только кавычки ("), амперсанды (&) и левые угловые скобки (<). </p>

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

1 голос
/ 05 апреля 2011

Последовательность символьных символов HTML &#24859; (т.е. восемь одиночных байтов &, #, 2, 4, 8, 5, 9, ; inих традиционные значения ASCII), представляющие кодовую точку Unicode, не совпадают с последовательностью байтов UTF-8, представляющей кодировку UTF-8 той же кодовой точки (то есть 4 шестнадцатеричных байта 0xF0 0xA4 0xA1 0x99).

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

Что происходит?

Это простое консольное приложение показывает, что обычные кодовые точки Unicode (при условии, что они не представляют вещь, требующую экранирования HTML, такую ​​как <), не получаютпереведено: </p>

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-кодирование предполагает, что вы хотите видеть символы &.Как и во втором примере, где <преобразуется в <code>&lt;

...