Xdocument - 如何转换非html安全字符

时间:2010-11-25 11:23:27

标签: c# xml linq-to-xml

我的UTF-8 xml元素中有一个“title”属性,例如

<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)
);

&amp;等人物和“逃脱,但§£不是 - 因为他们是有效的utf-8字符。 我应该改变什么?

2 个答案:

答案 0 :(得分:2)

如果页面声明为UTF-8,则HTML支持UTF-8字符。

  

您应始终指定编码   用于HTML或XML页面。如果你   不要,你冒这个角色的风险   你的内容不正确   解释。这不仅仅是一个问题   人类可读性日益增加   机器需要了解您的数据   太。你也应该检查一下   没有指定不同的编码   在不同的地方。

如果页面的默认编码是范围较小的字符集,则它不会正确呈现所有UTF-8字符。但是,如果文档声明为UTF-8,它们应该显示正常。

而不是用实体引用替换字符you may need to explicitly declare the encoding of your page as UTF-8.

有多种方法可以做到这一点:

  • <meta charset="UTF-8">
  • <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
  • <?xml version="1.0" encoding="UTF-8"?>

答案 1 :(得分:0)

可能是您可以手动解码这些字符。我之前用过这个

 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;

    }

有关详细信息,请参阅此HTMLSymbol table