特殊字符渲染不正确

时间:2014-04-23 18:41:16

标签: ruby-on-rails postgresql heroku nokogiri liquid

在表单字段中,用户输入了以下文本:

  

NúmeroTelefónico

尽管文本在表单字段本身中呈现正常(即使在刷新之后),但在使用<%= @foo.text %>的其他页面上输出时,相同的文本(提交并保存到数据库)看起来像这样:

  

NúmeroTelefónico

(我认为)我已确保一致使用UTF-8编码:

irb(main):014:0> "Número Telefónico".encoding
=> #<Encoding:UTF-8>

通过psql:

=> SHOW SERVER_ENCODING;
 server_encoding 
-----------------
 UTF8

在HTML方面:

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

但是这些角色仍然无法正常渲染。如果我能提供更多信息,请告诉我。

更新

只有通过Liquid templating engine呈现时,文字才会被搞砸。我将在Liquid的Github上发布一个问题,并将用任何新信息更新这个问题(希望答案)。

更新2

这是relevant Github issue

1 个答案:

答案 0 :(得分:0)

真正的罪魁祸首最终是Nokogiri,而不是Liquid。 Nokogiri用于解析和操纵最终将通过Liquid的HTML。然而,在Nokogiri的HTML时代,它使编码混乱(特别是在使用doc.replace时),从而搞砸了特殊字符。

此特定问题的相关问题和答案(我最终使用了以下第二个链接中的解决方案):