Ruby Nokogiri::HTML::Builder编码问题



我们正在使用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片段并创建一个新页面后,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,但无论我们尝试什么,我们的输出中仍然会出现奇怪的符号。

这是一个RubyonRails 4应用程序。

有什么想法吗?谢谢

更新:如果我更改:

doc.body {
          doc << page_doc
        }

对此:

doc.body {
          doc.text page_doc
        }

然后字符编码是正确的,但所有的HTML都不正确,因为我得到了

&lt; 

而不是

< 

等等。

好的,所以我们发现它实际上与Heroku和安装在那里的libxml版本有关,这就产生了问题:Nokogiri在Heroku 上解析时添加了字符

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

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

相关内容

  • 没有找到相关文章

最新更新