gpt4 book ai didi

ruby-on-rails - 被 nokogiri 在 ruby​​ on rails 中转换为 "\u0092"

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:07 25 4
gpt4 key购买 nike

我有一个 html 页面,其中包含一些 html 实体,例如“’”。

#Here I am not pasting whole html page content. just putting issue line only
html_file = "<html>....<body><p>they&#146;re originally intended to describe the spread of of viral diseases, but they&amp;#146;re nice analogies for how web/SN apps grow.<p> ...</body></html>"


doc = Nokogiri::HTML(html)
body = doc.xpath('//body')
body_content = body[0].inner_html

puts body_content

结果:

These terms come from the fields of medicine and biology  they\u0092re originally intended to describe the spread of of viral diseases, but they\u0092re nice analogies for how web/SN apps grow.

我想保留这些实体的原样,而不是将其更改为 unicode。有什么,我错过了吗?

谢谢

最佳答案

they&#146;re

是错误的,应该避免。如果你想在那里使用闭单引号,重现将撇号呈现为斜引号的打印实践,那么正确的字符是 U+2019 右单引号,可以写成 ’ ;。或者,如果您使用的是 UTF-8,则只需逐字包含 '

’ 应该引用字符 U+0092,这是一个很少使用且毫无意义的控制字符,通常呈现为空白或缺少字形框。在 XML 中确实如此。

但在 HTML 中(XHTML 除外,它使用 XML 规则),它是一个长期存在的浏览器怪癖,字符引用范围在 €Ÿ 被误解为与 Windows 西方代码页 (cp1252) 中的字节 128 到 159 关联的字符,而不是具有这些代码点的 Unicode 字符。 HTML5 标准最终记录了这种行为。

问题是 Nokogiri 并不知道这个怪癖,并且照原样使用字符引用 146,以您并不真正想要的字符 146 (\u0092) 结尾。我认为 Nokogiri 正在使用 libxml2 来解析 HTML,因此最终正确的解决方法是使用 libxml2 的 htmlParseCharRef 函数来替换字符 128–159。

与此同时,您或许可以尝试在解析之前使用粗略的字符串替换(如 ’->)手动“修复”字符引用。这有点不对,但至少在 HTML 中,唯一可以使用标记序列 ’ 而不是字符引用的地方是在注释中,所以希望这无关紧要如果您不小心更改了那里的内容。

关于ruby-on-rails - 被 nokogiri 在 ruby​​ on rails 中转换为 "\u0092",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com