ColdFusion/Javascript转义单引号

9
我知道这可能只是我错过的一些简单东西,但还是让我来试试吧:
我有一个ColdFusion应用程序,用户可以在多个屏幕上输入文本。我有一个JavaScript函数,它会检查输入的文本是否与存储在数据库中的内容匹配,并弹出确认窗口询问他们是否要保存/放弃更改。
如果用户输入的文本包含引号(单引号或双引号),JavaScript将完全崩溃。我需要转义引号,同时保持检查内容是否匹配的能力。
我已经尝试了escape()和replace()函数(单独和组合使用),但什么都没有起作用。
JavaScript示例:
function change_question(){
    var feedback = document.getElementById('feedback').value; //this is what the user has entered on the page
    var stored_feedback = "#trim(StoredFeedback)#"; //this is what is stored in the database; retrieved via ColdFusion

    if (feedback != stored_feedback) {
        if (confirm('You have unsaved data on the page. Do you wish to discard your changes?')) {
            //go to next page
        }
    }
    else {
            //go to next page
    }
}

感谢您的选择。

如果有JSON编码实用程序,请使用它。 - Pointy
3个回答

15
内置的jsStringFormat将为JavaScript转义。
var stored_feedback = "#jsStringFormat(StoredFeedback)#";

这太完美了,谢谢Sam!不过有一个问题 - 我如何在反馈变量上使用它(即用户输入的内容)? - shimmoril
编辑:没事,我解决了:var feedback_string = document.getElementById('feedback').value; var feedback = #jsStringFormat('feedback_string')#; - shimmoril

0

我不懂得ColdFusion,但是根据文档:

var stored_feedback = #SerializeJSON( trim(StoredFeedback) )#; 

我认为您不需要显式地添加引号,因为字符串在序列化为JSON时应该自动以双引号结尾。但是,我无法亲自测试。


以上井号在程序中是不必要的。 - David Faber
@DavidFaber 真的吗?ColdFusion怎么知道那应该被解释为它的代码而不是JavaScript呢? - Pointy
2
需要使用哈希字符。我认为David认为这行代码是在CF上下文中,但实际上它是在JavaScript上下文中,旨在在cfoutput中使用。 - Jason Dean
谢谢 Pointy。我会记住这个建议,但是 jsScriptFormat 此次正好满足了我的需求。 - shimmoril
@Pointy,不好意思。我以为你是在<cfscript>函数内部执行这个操作(更加不建议使用<cfscript> - David Faber

0
如果您正在寻找ColdFusion解决方案,您可能会想使用这个:
HTMLEditFormat(string)

HTML转义字符串。返回字符被删除;换行符被保留。在HTML中具有特殊含义的字符被转换为HTML字符实体,例如>。


谢谢。所有与数据库相关的输入和输出都使用了HTMLEditFormat,但用户输入的(未保存)数据确实是问题所在。 - shimmoril
当值要输出到JavaScript代码中时,HTML转义是无用的。 - Pointy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接