无法正确逃离JSON模板中的内联JS

时间:2014-01-22 17:22:17

标签: javascript json knockout.js

这是我的JSON模板的一部分片段,我正在努力正确地逃避一些内联JS:

"output" : "...
            <a data-bind=\"attr: { href: '/click?url=' + 
            encodeURIComponent(imageLnk())
            .replace(/'/g,\"%27\")
            .replace(/"/g,\"%22\"), 
            onclick: 'return sl(this,\\'nw\\',\\'' + $root.moduleId() + '_i' + 
            $data.index() + '-1\\');' }\">
                <img data-bind=\"attr: { src: imageSrc, alt: imageAlt }\">
            </a>
            ..."

忽略我的空白。我添加它是为了易读。

我的问题是在'部分中转义引号(".replace(/'/g,\"%27\").replace(/"/g,\"%22\"))。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

因为没有人有勇气穿过我的JSON肮脏的沼泽(谁可以诚实地责怪任何人不想要?),我决定通过在我的模型中添加一个名为{{1的模型来绕过我的问题它只是返回上面发布的内联淘汰JS。但是,我仍然想知道如何正确转义上述代码(如果可能的话)!

答案 1 :(得分:0)

我倾向于创建一个自定义绑定处理程序(例如“url”)并将所有转义代码放入其中。现在你的观点中有太多的逻辑;除此之外,如果你必须在一个实现某些内容安全策略的环境中运行(你可能必须使用类似于secure-bindings插件的东西,它不允许在绑定中进行函数调用),这将会咬你。