【问题标题】:Parsing unicode in unescaped XML在未转义的 XML 中解析 unicode
【发布时间】:2017-09-25 00:55:46
【问题描述】:

我正在尝试解析一些格式不正确的 XML。

我说格式不好 - 因为每个人都知道您不应该在 XML 文件中包含未转义的 & 符号。

问题是,我需要从 XML 文件中收集一些 unicode 格式的短语。我需要格式尽可能接近原始格式。您可以在控制台日志中复制此问题...

console.log($("<test>&#xE2;</test>").text())
// Outputs 'â' instead of desired '&#xE2;'

我已经尝试了escapeunescape()encodeURI()decodeURI() 的所有组合,我能理解。

我已经尝试了 jQuery 的 ajax({processData: bool}) 标志的两种设置。我找到的所有答案都指向这些解决方案 - 似乎它们都不起作用......

如何修改以上代码输出原始XML内容?

【问题讨论】:

  • 不是。这不是一个通用的转义/取消转义问题 - 它特定于 unicode。如果你要标记,至少阅读问题。谢谢。
  • 我阅读了这个问题。只是误会了。下次尝试使用一些 xml 示例代码和 javascript 代码以适当的方式解释您的问题,这些代码解释了您如何尝试读出这些短语。您的标题具有误导性:您不想parse 它。您想从 xml 中检索它而不与 unicode 字符进行自动交换。那是不同的东西。
  • 在您的示例中,可以将所有&amp;amp; 替换为&amp;amp;。您不需要创建 HTMLNode 的开销:console.log($('&lt;test&gt;'+'&amp;#xE2;'.replace('&amp;', '&amp;amp;')+'&lt;/test&gt;').text())Here is a little fiddle

标签: javascript jquery xml unicode


【解决方案1】:

使用new Option(yourUnescapedXml).innerHTML。所以直接回答你的问题,

console.log($(`<test>${new Option('&#xE2;').innerHTML}</test>`).text())

这会创建一个HTMLOptionElement,然后立即获取其(转义的)innerHtml。

【讨论】:

  • 不知道它是如何工作的——但我无法与结果争论!谢啦! (编辑:在接受答案之前需要再等 6 分钟 - 但如果其他人发帖,我会选择这个。这是最直接的答案)
  • 我已经更新了答案以解释它是如何工作的。如果您想接受这个答案,请将其标记为这样。
  • 完成。再次感谢 - 并提供更多信息。会更早地标记它,但从提出问题和选择答案有 10 分钟的冷却时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多