Xdocument - как конвертировать не HTML безопасные символы - PullRequest
2 голосов
/ 25 ноября 2010

У меня есть атрибут title в элементах моего UTF-8 xml, например,

<tag title="This is some test with special chars §£" />

Поскольку я хочу, чтобы содержимое этого атрибута печаталось непосредственно на HTML-странице, я пытаюсь получить вывод наподобие:

<tag title="This is some test with special chars &#x00a7;&#x00a3;" />

Фрагмент кода, куда я добавляю атрибут, выглядит так:

new XElement( "tag",
    new XAttribute( "title" , title)
);

Символы, такие как & и "экранированы, но § £ - нет - так как они действительны как utf-8 символов. Что я должен изменить?

Ответы [ 2 ]

2 голосов
/ 25 ноября 2010

Символы UTF-8 поддерживаются в HTML, если страница объявлена ​​как UTF-8.

Необходимо всегда указывать кодировку, используемую для страницы HTML или XML,В противном случае вы рискуете, что символы в вашем контенте будут неправильно интерпретированы.Это не просто вопрос читабельности человека, все чаще машины должны понимать и ваши данные.Вам также следует убедиться, что вы не указываете разные кодировки в разных местах.

Если кодировка по умолчанию для страницы - это набор символов с меньшим диапазоном, то он не будет отображать все UTF-8 символов правильно.Однако, если документ объявлен как UTF-8, он должен отображаться нормально.

Вместо того, чтобы заменять символы ссылками на сущности, вам может понадобиться явно объявить кодировку вашей страницы как UTF-8.

Существует множество способов сделать это:

  • <meta charset="UTF-8">
  • <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
  • <?xml version="1.0" encoding="UTF-8"?>
0 голосов
/ 25 ноября 2010

Может быть, вы можете вручную декодировать эти символы. Я использовал это раньше

 Dictionary<string, char> HTMLSymbolMap = new Dictionary<string, char>()
        {
            {"&#8211;",'–'},
            {"&#8212;",'—'},
            {"&#8216;",'‘'},
            {"&#8217;",'’'},
            {"&#8218;",'‚'},
            {"&#8220;",'“'},
            {"&#8221;",'”'},
            {"&#8226;",'•'},
            {"&#183;",'·'},
            {"&#8222;",'„'},                
            {"&#163;",'£'},
            {"&#167;",'§'},

        };

   public string CleanJunk(string docText)
    {


        foreach (var kv in HTMLSymbolMap)
        {
            docText = docText.Replace(kv.value.tostring(), kv.key);
        }

        return docText;

    }

См. Эту таблицу символов HTML для получения дополнительной информации

...