2014-03-26 53 views
-1

我的代碼是Javascript。如何防止HTML符號被取代< "等

var button = document.createElement('a'); 
button.innerHTML = '<div class="some_class"><div>Download</div><div class="quality">'+ element[1] +' ('+ element[2] + 'ГБ)</div></div>'; 

我通過AJAX加載這個劇本,我想它來執行。 但瀏覽器加載它:

button.innerHTML = '&lt;divclass=&quot;some_class&quot;&gt;&lt;div&gt;Download&lt;/div&gt;&lt;div class=&quot;quality&quot;&gt;'+ element[1] +' ('+ element[2] + 'ГБ)&lt;/div&gt;&lt;/div&gt;' 

這當然會導致語法錯誤。

如何解決?

編輯:如果我直接去頁面http://myserver.com/script.js - 它正常工作。但是,如果我使用ajax來加載它,像這樣:

$.ajax({url: "http://myserver.com/script.js?url=" + 
location.href, dataType: "script"}); 

它得到HTMLEncoded。

+0

這不會解決問題,但爲什麼你把'div'放在'a'元素裏面?非常不尋常。你爲什麼要調用''''''按鈕''。你不覺得代碼應該是可讀和簡單的嗎? – ElmoVanKielmo

+0

@Mikhail我不確定你的值是在哪裏獲得HTMLEncoded,這真的是我猜測的「問題」的路線。 (儘管出於安全原因可能會這樣做)。但你發佈的代碼並沒有顯示實際的問題,因爲採取面值它會工作... http://jsfiddle.net/6kYP9/ –

+0

@StephenJames我已經添加了一些解釋。你能看一下嗎? –

回答

0

嘗試

var replaceStrings = { 
"&": "&amp;", 
"<": "&lt;", 
">": "&gt;", 
'"': '&quot;', 
"'": '&#39;', 
"/": '&#x2F;' 


}; 

    function escapeHtmlCharacters(string) { 
    return String(string).replace(/[&<>"'\/]/g, function (str) { 
     return replaceStrings[str]; 
    }); 

}

或者乾脆

html.replace(/&/g, '&amp;') 
        .replace(/>/g, '&gt;') 
        .replace(/</g, '&lt;') 
        .replace(/"/g, '&quot;') 
        .replace(/'/g, '&apos;'); 
1

你需要找出應用這種轉換。它可能是服務器端或你的ajax庫。我建議你在瀏覽器開發工具中查看「網絡」頁面。在那裏你可以看到你從服務器得到的是什麼。

0

解決了。謝謝大家。

將Rails視圖添加了.htmlsafe方法。