如何让Nokogiri不要转换  到太空

我拿一个像html一样的html片段

"
  • 市 场 价"
  • 其中包含“   ”,但在调用Nokogiri NodeSet的to_s之后,它就变成了

     "
  • 市 场 价"
  • ,我想保留原始的html片段,并尝试设置:save_with option方法的:save_with option ,但失败了。

    有人会遇到同样的问题并给我帮助吗? 先感谢您。

    我遇到了类似的情况,我提出的是一个黑客,但似乎运作良好。

     nbsp = Nokogiri::HTML(" ").text text.gsub(nbsp, " ") 

    就我而言,我希望成为一个普通的空间。 我认为在您的情况下,您希望将它们返回到“ ”,因此您可以执行以下操作:

     nbsp = Nokogiri::HTML(" ").text html.gsub(nbsp, " ") 

    我认为问题在于你是如何看待字符串的。 它看起来像一个空间,但它并不完全相同:

     require 'nokogiri' doc = Nokogiri::HTML('"
  • 市 场 价"') (doc % 'li').content.chars.to_a[1].ord # => 160 (doc % 'li').to_html # => "
  • 市 场 价\"
  • "

    常规空间是0x20' '160是非破坏空间的十进制值,这是什么  在使用Nokogiri的各种inner_textcontenttextto_s标签后转换为。 它不再是HTML实体编码,但它仍然是一个不间断的空间。 我认为Nokogiri从实体编码的转换是在要求字符串化时的适当行为。

    可能有一个标志告诉Nokogiri不解码该值,但我不知道它是否在手边。 您可以查看我在上面的评论中提到的Nokogiri的邮件列表,看看是否有旗帜。 我可以看到Nokogiri有一个优点就是进行解码,所以如果没有这样的标志,它偶尔会很好。

    现在,所有这一切,我认为to_html方法应该将值返回到它的实体编码值,因为不间断的空间是HTML流中遇到的令人讨厌的事情。 而且我认为你应该在邮件列表中提及,甚至可能是一个bug。 我认为这是不恰当的结果。


    http://groups.google.com/group/nokogiri-talk/msg/0b81ef0dc180dc74

    好的,我现在可以解释一下这种行为。 基本上,问题归结为编码。

    在Ruby 1.9中,我们检查了你为Nokogiri提供的字符串的编码。 如果输入字符串是“utf-8”,则假定该文档是UTF-8文档。 输出文档时,由于“”可以表示为UTF-8字符,因此输出为UTF-8字符。

    在1.8中,由于我们无法检测文档的编码,我们假设二进制编码并允许libxml2检测编码。 如果将输入文档的编码设置为二进制,它将返回所需的实体。 这是一些演示代码:

      require 'nokogiri' html = 'hello   world' f = Nokogiri.HTML(html) node = f.css('body') p node.inner_html f = Nokogiri.HTML(html.encode('ASCII-8BIT')) node = f.css('body') p node.inner_html 

    我也发布了一个youtubevideo! 🙂

    http://www.youtube.com/watch?v=X2SzhXAt7V4

    亚伦帕特森

    您的示例文本不是ASCII-8BIT因此请尝试将该编码字符串更改为Unicode字符集名称,并查看inner_html是否将返回实体编码的值。