为什么调用to_json输出填充的javascript

时间:2011-04-21 03:15:38

标签: ruby-on-rails ruby

在我正在执行的控制器操作中:

@user = user.to_json

然后在我看来我正在做:

<script type="text/javascript">
<%= @user %>
</script>

结果html就像:

[{&quot;user&quot;:{&quot;age&quot;:8,....

为什么它包含“无处不在?”

在irb中输出就好了:

[{\"user\":{\"age\":8,...

2 个答案:

答案 0 :(得分:2)

在Rails 3中,默认情况下会对视图中的所有输出进行转义。你曾经不得不打电话给h(..)逃避。

你可以通过调用html_safe告诉Rails你输出的确实是安全的并且rails不需要担心它:

<script type="text/javascript">
<%= @user.html_safe %>
</script>

原因是这些数据通常来自您的用户(例如人们发布表单),并且它们可能包含您随后输出的恶意内容,从而导致XSS攻击等。 Rails 3采取了一种(有点争议)的方法,在这里格外谨慎。

以下是耶胡达关于html_safe的好blog post以及实际发生的事情

答案 1 :(得分:2)

尝试使用原始方法?

<%= raw @user %>