2012-03-21 95 views
7

我知道这将是一些简单的,我只是缺少莫名其妙,但这里有云:的ColdFusion/JavaScript的逃逸单引号

我有一个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 
    } 
} 

感谢。

+0

如果有JSON编码实用程序,请使用它。 – Pointy 2012-03-21 14:27:51

回答

12

在jsStringFormat内置将难逃为JavaScript

var stored_feedback = "#jsStringFormat(StoredFeedback)#"; 
+0

这是完美的,谢谢山姆!一个问题 - 我如何在反馈变量上使用它(即用户输入的内容是什么) – shimmoril 2012-03-21 14:46:41

+0

编辑:无所谓,我想到了:var feedback_string = document.getElementById('feedback')。value; var feedback = #jsStringFormat('feedback_string')#;' – shimmoril 2012-03-21 14:52:33

0

我不知道ColdFusion的,但根据文档:

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

认为你不应该需要明确地添加引号,作为一个字符串时,序列化到JSON应该用双引号结束无论如何。再次,我无法自己测试这个。

+0

上面的哈希字符是不必要的。 – 2012-03-21 14:41:48

+0

@DavidFaber真的吗? ColdFusion如何知道这应该被解释为它的代码而不是JavaScript? – Pointy 2012-03-21 14:42:54

+2

哈希字符是必需的。我相信David认为预定的行是在CF上下文中的,但是它是在用于在cfoutput – 2012-03-21 14:53:37

0

如果你正在寻找一个ColdFusion的解决方案,你可能会想用这个:

HTMLEditFormat(string) 

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

+0

谢谢。来自数据库的所有内容都使用HTMLEditFormat,但用户输入的(未保存的)数据确实是问题。 – shimmoril 2012-03-21 14:54:44

+0

将值输出到JavaScript代码时,HTML转义无用。 – Pointy 2012-03-21 16:29:19