【问题标题】:String with new line escape characters breaks Javascript script带有换行符的字符串会破坏 Javascript 脚本
【发布时间】:2014-11-09 19:55:36
【问题描述】:

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

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

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

德语+文本%0D%0A德语+next+line

自然而然的 javascript 函数就会崩溃。 下图显示了我在控制台中遇到的错误:

我也试过不使用unescape的方法(其实那是我的第一个版本,后来我加了unescape希望它能解决我的问题),但还是一样。

有没有办法在不阻止此类条目进入数据库的情况下解决这个问题?

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

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

【问题讨论】:

    标签: javascript newline


    【解决方案1】:

    我不确定到底是什么服务器软件在进行转换,所以我无法提供代码,只能提供一种策略。

    JavaScript 不允许在这样的字符串文字中使用换行符,您可能已经知道了。为了解决这个问题,将其发送给客户端之前,您需要将换行符替换为文字 \n 转义码。

    你现在也不应该需要unescape()

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-11-30
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        • 1970-01-01
        • 2020-11-10
        • 2020-07-23
        • 2014-11-13
        • 2010-09-19
        相关资源
        最近更新 更多