Rails sanitize方法用双引号替换单引号

时间:2016-01-27 23:55:23

标签: ruby-on-rails json ruby-on-rails-3 ruby-on-rails-4

当看到锚标记时,rails sanitize方法用双引号替换单引号。

实施例

sanitize("<a href='https://google.com'>google</a>")
=> "<a href=\"https://google.com\">google</a>"

这是有问题的,因为在我的应用程序中,我正在清理可能包含这些字符串的JSON有效负载,这会导致JSON格式错误。

JSON.parse("{\"link\":\"<a href='https://google.com'>google</a>\"}")
=> {"link"=>"<a href='https://google.com'>google</a>"}

JSON.parse(sanitize(("{\"link\":\"<a href='https://google.com'>google</a>\"}"))
=> JSON::ParseError

我无法控制输入字符串。有没有办法阻止单引号转换为双引号?

1 个答案:

答案 0 :(得分:0)

这应该有效。您可以先清理用户输入,然后再创建一个json,而不是清理完整的json:

link_html = "<a href='https://google.com'>google</a>"
data = {"link" => sanitize(link_html)}.to_json

它会像这样创建一个json:

"{\"link\":\"<a href=\\\"https://google.com\\\">google</a>\"}"

在接收端,JSON.parse可以正常工作:

irb(main):009:0> JSON.parse("{\"link\":\"<a href=\\\"https://google.com\\\">google</a>\"}")
=> {"link"=>"<a href=\"https://google.com\">google</a>"}