在我的应用程序中,我让用户输入注释,这可能是不安全的。当我在视图中渲染它们时,以下很好地显示了注释:
<%= simple_format h annotation.body %>
它保留了换行符,但也正确地转义了 HTML。现在,我需要在由 Javascript 创建的叠加层中呈现这个主体。现在,我通过从控制器调用以下命令通过 JSON 获取我的注释:
def index
# ...
respond_to do |format|
format.json { render :json => @annotations }
end
end
并像这样创建叠加层(非常简化的示例):
$.getJSON(this.annotations_url, function(data) {
$.each(data, function(key, val) {
annotation = val;
this.div_body.html(annotation.body);
// ...
当然,生成的 HTML不会被正确转义,并且换行符也不会被保留。
现在,我不想使用纯 Javascript 来进行转义和换行转换,因为如果我这样做的话,我感觉我不会干很多。整个代码似乎很难维护和混乱。
我不能以某种方式通过 JSON 从控制器发送安全的 HTML 正文吗?看起来好像 ERBsimple_format
和h
方法仅在视图中可用。
或者我真的应该用 Javascript 做所有事情吗?