【问题标题】:Special characters rendering improperly特殊字符渲染不正确
【发布时间】:2023-04-05 02:08:02
【问题描述】:

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

Número Telefónico

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

Número Telefó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

【问题讨论】:

  • @muistooshort 查看我更新的问题。罪魁祸首是 Liquid,虽然我还没有解决办法。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 2016-03-10
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多