我正在努力解决我正在构建的小型系统中的编码问题。
在 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);
});