2015-06-13 80 views
2

我是相當新的灰燼,但我在V1.12並用以下問題所困擾。如何停止Ember.Handlebars.Utils.escapeExpression轉義單引號

  • 我正在做一個模板,幫助
  • 助手大約需要的井號標籤和用戶名鳴叫和HTML錨的屍體。

我下面的範例是:

  1. 使用Ember.Handlebars.Utils.escapeExpression(value);逃脫輸入文本
  2. 做邏輯
  3. 使用Ember.Handlebars.SafeString(value);

然而,1似乎逃脫撇號。這意味着我傳給它的任何句子都會被轉義出來。我怎樣才能避免這一點,同時確保我沒有引入潛在的漏洞?

編輯:實施例代碼

export default Ember.Handlebars.makeBoundHelper(function(value){ 
    // Make sure we're safe kids. 
    value = Ember.Handlebars.Utils.escapeExpression(value); 
    value = addUrls(value); 
    return new Ember.Handlebars.SafeString(value); 
}); 

哪裏addUrls是使用正則表達式來查找和替換#標籤或用戶名的函數。例如,如果它被給予#emberjs foo它將返回<a href="blah">#emberjs</a> foo

上述輔助函數的結果將顯示在灰燼(HTMLBars)模板。

回答

0

escapeExpression旨在將字符串轉換爲表示形式,該表示形式在插入到DOM中時由瀏覽器翻譯過的轉義序列將導致原始字符串。所以

"1 < 2" 

被轉換成

"1 &lt; 2" 
其中如果 "1 < 2"被直接插入到DOM(例如用 innerHTML)當插入到DOM顯示爲

1 < 2 

,它會會造成很大的麻煩,因爲瀏覽器會將<解釋爲標籤的開頭。

所以escapeExpression轉換符號,小於符號,大於符號,直單引號,直雙引號和反引號。對於文本節點,引號的轉換不是必需的,但可以用於屬性值,因爲它們可能包含在單引號或雙引號中,同時也包含這些引號。

這裏使用的列表:

var escape = { 
    "&": "&amp;", 
    "<": "&lt;", 
    ">": "&gt;", 
    '"': "&quot;", 
    "'": "&#x27;", 
    "`": "&#x60;" 
}; 

我不明白,爲什麼加引號的轉義應當引起你的問題。假設您正在執行escapeExpression,因爲您希望在使用普通的雙存儲器{{}}輸出到模板中時,可以正確顯示<等字符。恰恰相同的事情適用於報價。它們可能會被轉義,但是當顯示字符串時,它應該顯示正常。

也許您可以提供一些關於輸入和所需輸出的更多信息,以及如何「打印」字符串以及在不希望出現的情況下,您會看到逃脫的引號。

+0

感謝您的回覆和解釋。我已經添加了一些我希望能夠幫助的示例代碼和示例。 – timfernando

+0

在你的情況下,在調用'escapeExpression'之前調用'addUrls'是不是正確的方法?你不想'addUrls'必須處理轉義字符串。 –

+0

,但那麼'addUrls'添加的鏈接將被轉義爲文本而不是鏈接? – timfernando