新手问题 关于符号 ” 被转义成 " 的解决方法,不使用 raw 和 html_safe 方法!!!

qq2729877005 · 2017年08月30日 · 最后由 baurine 回复于 2018年02月07日 · 13682 次阅读

在 script 脚本中,我是这样定义的:

var user = <%= User.where(state: "封禁").pluck(:name) %>;

调式结果是:

var user =  [&quot;滴酒醉&quot;, &quot;打工走天下&quot;];

很明显 ” 被转义成 &quot 了,使用 raw 和 html_safe 倒可以解决,但这种做法又关闭了安全过滤,存在安全隐患,有没有更完美的解决方案???

两个做法应该都是不正确的。

你这里是在把 Ruby 数组转换成 JavaScript 数据,那么很显然你需要一个到 JavaScript 的转换器,也就意味着你需要……

to_json.

不建议在 js 里面直接使用 erb 得到数据,这样做太多不可预见的坑,把逻辑整理得简单点会更 reliable

而且不建议在 view 进行数据库操作

@msg7086

额,使用 to_json 后还是解决不了,在 erb 转化成 html 后被转义为:

var user =  [/&quot;滴酒醉/&quot;, /&quot;打工走天下/&quot;];

不过换了种方式解决了:

在 controller 中,将查询的到的数组连成字符串:

@users = User.where(state: "封禁").pluck(:name).join("|")

在 view 中,用 js 将得到的字符串分解成数组:

var users = (<%= @users %>).split("|")

可以得到正确数据

["滴酒醉", "打工走天下"]

@leiz_me @winse

这样可以吗?

qq2729877005 回复

to_json.html_safe

有个 escape_javascript 方法的

我记得 Rei 有发过这个经验帖 https://ruby-china.org/topics/16633

@doitian escape_javascript 这个方法实现不了楼主的需求 例如,我现在就需要将 "A 股第四次闯关 MSCI 成功&呵呵哒" 这样一个字符串的值赋值给一个 JS 的变量,首先采用 escape_javascript 实现不了,字符串里面的"&"符号任然被转义写成"&",目前只能采用的方法是 raw,我没有查到更好的方法,如果哪位大侠知道,还请告知一下。 @mapana ,这个帖子说的东西貌似和这个问题是相反的~~~

@qq2729877005 @uestc_bird

rails 的默认行为是转义,如果你想输出富文本,又想保证安全,用 sanitize !

你可以再看一下这个帖子:https://ruby-china.org/topics/16633 我在后面有追加提问。

qq2729877005 关闭了讨论。 06月29日 14:33
需要 登录 后方可回复, 如果你还没有账号请 注册新账号