我有一个Javascript脚本,它使用EL
和tld
文件从数据库中获取一些文本:
以下代码是相关的行:
var deText = unescape("${smfn:getText('HelpTextDe')}");
问题是数据库中的文本可以包含新的换行符,如下所示:
德国+文本%0D%0AGerman +下一+线
自然javascript功能崩溃了。 下图显示了我在控制台中收到的错误:
我也尝试过没有unescape
方法(实际上,这是我的第一个版本,我后来添加unescape
希望它能解决我的问题),但它是一样的。
有没有办法解决这个问题,而不会阻止这些条目进入数据库?
注意: 在回答时请记住,我对Javascript的了解非常有限。
感谢任何帮助。提前谢谢!
答案 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字符,这将正常工作。
另外,我真的希望用户不会输入您从数据库呈现的文本。除非你擦洗它,否则这是一个巨大的安全问题。