带有换行符的字符串会破坏Javascript脚本

时间:2014-11-09 19:55:36

标签: javascript newline

我有一个Javascript脚本,它使用ELtld文件从数据库中获取一些文本: 以下代码是相关的行:

var deText = unescape("${smfn:getText('HelpTextDe')}");

问题是数据库中的文本可以包含新的换行符,如下所示:

  

德国+文本%0D%0AGerman +下一+线

自然javascript功能崩溃了。 下图显示了我在控制台中收到的错误:

enter image description here

我也尝试过没有unescape方法(实际上,这是我的第一个版本,我后来添加unescape希望它能解决我的问题),但它是一样的。

有没有办法解决这个问题,而不会阻止这些条目进入数据库?

注意: 在回答时请记住,我对Javascript的了解非常有限。

感谢任何帮助。提前谢谢!

2 个答案:

答案 0 :(得分:0)

我不确定服务器软件究竟在做什么转换,所以我无法提供代码,只提供策略。

JavaScript并不允许像这样的字符串文字中的换行符,正如您可能已经想到的那样。要解决这个问题,之前将其发送到客户端,您需要使用文字\n转义码替换换行符。

你现在也不应该unescape()

正如我所说,我让你真正实现这一点。

答案 1 :(得分:0)

如果数据库实际上已经转义了%0D和%0A字符,那么这将完全正常。 Try running this code: document.write('<pre>' + unescape('a%0Db%0Ac') + '</pre>');

有效。 (请注意,如果没有<pre>标记,则新行会在浏览器呈现时显示为空格。如果您在Firebug / Chrome中查看页面:检查元素,您将正确看到新行。)

问题是数据库中有UNESCAPED换行符,而Javascript认为你的字符串终止于该行的末尾。如果您将数据库更改为实际包含%0D%0A字符,这将正常工作。

另外,我真的希望用户不会输入您从数据库呈现的文本。除非你擦洗它,否则这是一个巨大的安全问题。