我需要将 JSON 对象嵌入到 HTML 数据属性中。使用 Ruby to_json
RubyArrayOfHashes.to_json
生成正确的 JSON 字符串,但不会转义。所以我在我的 HTML 中得到了这个:
data-track="[{"source_id":7}]"
由于双引号没有被转义,上述内容无效。
ruby 中是否有与 JS JSON.stringify() 函数等效的函数?
我需要在我的数据属性中而不是在脚本标签中使用它。
由于您没有使用更常见的自动转义值的模板框架,因此您需要手动确保您发出到 HTML 中的所有用户提供的值都正确转义。
您可以将CGI
模块用于 Ruby 附带的模块:
require 'cgi'
def h(value)
CGI.escapeHTML(value)
end
json = RubyArrayOfHashes.to_json
html = "<div data-track=\"#{h json}\">something</div>
请注意,根据发出的数据的解释方式,您可能需要使用其他转义方法。例如,如果您在标签之间发出 Javascript 代码<script>
,则需要以不同的方式对其进行转义。
通常,您应该研究自动转义值的方法,类似于 Rails 在最近版本中所做的。当您忘记转义某些数据时,必须手动转义所有发出的值会很快导致错误,从而导致 XSS 漏洞等安全问题。