【发布时间】: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都不正确
<
而不是
<
等等
【问题讨论】:
-
请在
doc << page_doc行之前插入:p doc.encoding; p page_doc.encoding如果doc当然是字符串。可能会变成utf-8的无效转换
标签: html ruby ruby-on-rails-4 character-encoding nokogiri