2

我正在努力解决我正在构建的小型系统中的编码问题。

在 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-command 构建的一个小工具。这导致了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);
});
4

0 回答 0