【问题标题】:Ruby Nokogiri::HTML::Builder Encoding ProblemsRuby Nokogiri::HTML::Builder 编码问题
【发布时间】:2014-05-28 00:40:56
【问题描述】:

我们正在使用 Nokogiri 根据用户输入创建 HTML5 页面,但我们发现了一些奇怪的编码问题。

在我们的数据库表中,我们有一个名为compiled_html的属性,其中包含:

<p class="lead align-left">Just testing out some encoding issues:<br><br>Héllo Äre Thésè symbols showing correctly? </p>

从我们的数据库中提取这个 HTML sn-p 并创建一个新页面后 Nokogiri 输出:

<p class="lead align-left">Just testing out some encoding issues:<br><br>Héllo Ãre Thésè symbols showing correctly? </p

这就是我们提取compiled_html数据并使用Nokogiri的方式:

page_doc = Nokogiri::HTML::fragment(page.compiled_html)

(阅读后输出page_doc时的旁注HTML是正确的)

# create page html
    builder = Nokogiri::HTML::Builder.new(:encoding => 'UTF-8') do |doc|
      doc.html {
        doc.head {
          doc.title page.name
          doc.meta(charset: 'utf-8')
          doc.meta(name: 'viewport', content: 'width=device-width, initial-scale=1.0')
          doc.meta(name: 'description', content: '')
          doc.meta(name: 'author', content: "#{issue.publication.user.firstname} #{issue.publication.user.lastname}")
          doc.link(rel: 'stylesheet', href: "themes/#{theme.identifier}/theme.css")
          doc.script(type: 'text/javascript', src: "themes/#{theme.identifier}/theme.js")
        }
        doc.body {
          doc << page_doc
        }
      }
    end

我们已经尝试以不同的方式将编码设置为 utf-8,但无论我们尝试什么,我们仍然会在输出中得到奇怪的符号。

这是针对 Ruby on Rails 4 应用程序的。

有什么想法吗?谢谢!

更新:如果我改变:

doc.body {
          doc << page_doc
        }

到这里:

doc.body {
          doc.text page_doc
        }

那么字符编码是正确的,但是我得到的所有HTML都不正确

&lt; 

而不是

< 

等等

【问题讨论】:

  • 请在doc &lt;&lt; page_doc 行之前插入:p doc.encoding; p page_doc.encoding 如果doc 当然是字符串。可能会变成utf-8的无效转换

标签: html ruby ruby-on-rails-4 character-encoding nokogiri


【解决方案1】:

好的,所以我们发现它实际上与 Heroku 以及那里安装的导致问题的 libxml 版本有关:Nokogiri adds characters during parsing on Heroku

我出色的程序员想出了一个快速解决方案来解决我们的问题:

    doc.body {
      # doc << page_doc
    }

    # insert html contents
    builder.doc.at_css('body').children = page_doc

【讨论】:

  • 很高兴它为您节省了一些时间:)
猜你喜欢
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
相关资源
最近更新 更多