【问题标题】:Escape String - Output rails string in Javascript [duplicate]转义字符串-Javascript中的输出rails字符串[重复]
【发布时间】:2013-09-22 04:20:28
【问题描述】:

我正在尝试将字符串值分配给我的 .erb 文件中的 javascript 对象,如下所示:

var data = {
    'name': '<%= @product.name %>',
    ...
};

问题是,如果name的值为Tom's small ears

data.name 的输出将是 Tom&amp;#x27;s small ears

有没有办法转义特殊字符?

我尝试执行'name': '&lt;%= raw @product.name %&gt;',但Uncaught SyntaxError: Unexpected identifier 将输出输出到控制台。

执行&lt;%= escape_javascript @product.name %&gt; 输出Tom\&amp;#x27;s small ears

编辑 @Stefan 在MrYoshiji's 答案下的评论对我有用。

【问题讨论】:

    标签: javascript ruby-on-rails ruby escaping special-characters


    【解决方案1】:

    您可以使用escape_javascript() 来实现:

    var data = {
        'name': "<%== escape_javascript @product.name %>",
        #...
    };
    

    链接: http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript

    这个方法的别名是j:

     var data = {
         'name': "<%== j @product.name %>"
     }
    

    【讨论】:

    • 现在的输出是Tom\&amp;#x27;s small ears
    • 当我测试这段代码时,它会在我的视图中为我显示Tom\'s small ears。尝试直接在视图中打印&lt;%= j @product.name %&gt;(而不是在 javascript 标记中)并查看输出是否是所需的。
    • 当我直接输出它时它工作,但我想把值放在一个javascript变量中
    • Rails 似乎逃脱了',尝试&lt;%== 而不是&lt;%=
    • @Ievgen 在此处查看第一个答案的第二条评论:stackoverflow.com/questions/7996695/… 引用:“双等号表示字符串未转义,如原始”
    【解决方案2】:
    var data = {
       'name': '<%=j @product.name.html_safe %>',
       ...
    };
    

    【讨论】:

    • 请不要这样做,除非您已经验证 @product.name 是一个不会导致 HTML 注入的净化字符串。
    • @Andrew 我相信jescape_javascript 的缩写)无论如何都会正确地转义字符串,对吧? (意思是这里的例子很好,除了调用html_safe 应该是不必要的)。
    猜你喜欢
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2016-06-02
    • 2020-11-15
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多