gpt4 book ai didi

ruby-on-rails - Rails 在 JSON 中以不同方式编码 HTML,相同版本

转载 作者:行者123 更新时间:2023-12-04 05:50:16 25 4
gpt4 key购买 nike

我在 Heroku 的两台服务器上运行相同的 (Rails 4.2.7.1) 应用程序,其中一台按预期工作:

ActiveSupport::JSON.encode(html: '<p>Hello World</p>')
#=> "{\"html\":\"<p>Hello World</p>\"}

在第二台服务器上运行相同的代码会产生不同的结果:

ActiveSupport::JSON.encode(html: '<p>Hello World</p>')
#=> "{\"html\":\"\\u003cp\\u003eHello World\\u003c/p\\u003e\"}"

两台服务器都有相同的 Ruby (ruby 2.2.6p396),从我收集到的信息来看,ENV['LANG'] 在编码中发挥作用,但两台服务器存储了相同的值在那里:“en_US.UTF-8”

感谢您的帮助。

其他详细信息:两个服务器生成的字符串均使用 UTF-8 编码。

ActiveSupport::JSON.encode(html: '<p>Hello World</p>').encoding
=> #<Encoding:UTF-8>

最佳答案

是因为ActiveSupport::JSON::Encoding.escape_html_entities_in_json

If true, encode >, <, & as escaped unicode sequences (e.g. > as u003e) as a safety measure

ActiveSupport::JSON::Encoding.escape_html_entities_in_json = false
encode = ActiveSupport::JSON.encode(html: '<p>Hello World</p>')
#=> "{\"html\":\"<p>Hello World</p>\"}

还有

ActiveSupport::JSON::Encoding.escape_html_entities_in_json = true
encode = ActiveSupport::JSON.encode(html: '<p>Hello World</p>')
#=> "{\"html\":\"\\u003cp\\u003eHello World\\u003c/p\\u003e\"}"

同样来自 source code ,实现起来非常简单。

def to_json(*)
if Encoding.escape_html_entities_in_json
super.gsub ESCAPE_REGEX_WITH_HTML_ENTITIES, ESCAPED_CHARS
else
super.gsub ESCAPE_REGEX_WITHOUT_HTML_ENTITIES, ESCAPED_CHARS
end
end

关于ruby-on-rails - Rails 在 JSON 中以不同方式编码 HTML,相同版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45492890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com