正在被 Nokogiri 在 Ruby on Rails 中转换为 "u0092"



我有一个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  theyu0092re originally intended to describe the spread of of viral diseases, but theyu0092re nice analogies for how web/SN apps grow.

我想让这些实体保持原样,而不是将其更改为unicode。有什么遗漏吗?

谢谢

they&#146;re

是错误的,应该避免使用。如果您想在这里使用右单引号,以再现将撇号呈现为斜引号的印刷实践,那么正确的字符是U+2019 RIGHT SINGLE QUOTATION MARK,可以写成&#x2019;&#8217;。或者,如果您使用的是UTF-8,则只需逐字包含

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

但是在HTML中(除了使用XML规则的XHTML),一个长期存在的浏览器怪怪现象是,&#128;&#159;范围内的字符引用被错误地解释为与Windows Western代码页(cp1252)中字节128到159相关的字符,而不是具有这些代码点的Unicode字符。HTML5标准最终记录了这种行为。

问题是Nokogiri不知道这个怪癖,并把字符参考146的单词,以字符146 (u0092)结束,你真的不想要的。我认为Nokogiri正在使用libxml2来解析HTML,因此最终正确的修复将是libxml2的htmlParseCharRef函数,以替换字符128-159。

在此期间,您可以尝试在解析之前使用&#146; -> &#x2019;等原始字符串替换手动"修复"字符引用。这有点错,但至少在HTML中,您可以拥有标记序列&#146;而不作为字符引用的唯一其他地方将是在注释中,因此,如果您不小心更改了那里的内容,希望它也不会有什么关系。

您是否尝试过更改

&amp;#146;

&#146;

我认为解析器首先解析&,然后用"#146"连接它,然后解析它们。这只是我的一个观点,我希望这只是一个评论,IDK如何,哈哈

我从focos在他的回答中得到了这个想法,从这里得到了unicode。

相关内容

  • 没有找到相关文章

最新更新