向客户端发送Javascript代码未正确转义

时间:2015-06-11 23:49:53

标签: javascript node.js string-decoding

我在构建的小型系统中遇到了编码问题。

在HTML中,加载此脚本

<script src="http://localhost:8000/serving/dk-711218"></script> 

通常我无法访问HTML,所以一切都必须在javascript文件中完成。

服务器端脚本在Node.js中生成,它根据可自定义XML文件中的某些设置返回代码片段。例如,在显示图像时,系统返回一个简单的

<img src="mypicture.jpg" />

如果是文本,则返回

<div class="myClass">This is a test</div>

如果他们有特殊行为,也会包含此代码。

这些部分按预期工作。这些代码块驻留在许多类中,并根据需要返回,以便逐步构建代码。

到目前为止,非常好。

问题是返回SWFobject库代码,因为它似乎会动态破坏代码。

所有代码都已转义并使用encodeURIComponent进行编码,因此系统只需要解码和转发即可。但验证失败了。

这是编码/转义前的前几行示例:

var%2520swfobject%253Dfunction%2528%2529%257Bvar...

以下是访问该页面时,Firefox源代码窗口中SWFObject的部分内容:

  

以及这里解码的SWFObject在同一窗口中的样子:

  

这种情况发生在几个地方,而这些事件的常见之处在于它看起来像未知原因的不足字符被不同地解释。

这里是视图渲染器,我无法确定问题是在代码中还是在渲染代码时造成的。

  

有什么想法导致这种行为?或者以这种方式包含代码时可能会提供一些关于最佳实践的建议?

回应评论:

  

尝试JSON.stringify

我也尝试过JSON解决方案,而可以解决问题! 我做的是 - 像以前一样 - 使用我用两个输入字段和两者之间的JSON.stringify命令构建的小工具预处理包含的代码。这导致了returnvar的内容:

Module.prototype.opens = function () {
    var returnvar = "var swfobject=function(){var D=\"undefined\",r=\"object\",S=\"Shockwave Flash\",W=\"ShockwaveFlash.ShockwaveFlash\",q=\"application/x-shockwave-flash\",R=\"SWFObjectExprInst\"... etc. 

并使用JSON.parse在渲染器中再次更正它:

router.get('/serving/:id', function (req, res) {
    var readSymbolicsXMLCallback = function(data) {
        res.render('index', {
            id: req.params.id,
            embedcode: JSON.parse(data)
        });
    }
    var embedcode = readSymbolicsXML(req.params.id, readSymbolicsXMLCallback);
});

0 个答案:

没有答案