2012-03-21 96 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