2008-12-10 38 views
29

我想通過使用jQuery將dataString傳遞給ajax調用。在調用中,我構造了get參數,然後將它們發送到接收端的php頁面。麻煩的是數據字符串中包含&符號,而HTML嚴格驗證器正在塞滿。如何在JavaScript字符串中轉義&符號以便頁面驗證嚴格?

下面是代碼:

$(document).ready(function(){ 
    $("input#email").focus(); 
    $('#login_submit').submit(function(){ 
     var username = $('input#email').val(); 
     var password = $('input#password').val(); 
     var remember = $('input#remember').attr("checked"); 
     var dataString = "email="+username+"&password="+password+"&remember="+remember; 
     $.post('login.php', dataString, function(data) { 
      if (data == 'Login Succeeded.') { 
       location.reload(true); 
      } else { 
       $("input#email").focus(); 
       $("#login_msg").html(data).effect("pulsate", {times: 2}, 1000); 
      } 
     });   
     return false; 
    }); 
}); 

,這裏是驗證消息的示例:無法生成一般實體「密碼」系統標識符。

var dataString = "email="+username+"&password="+password+"&remember="+rememb… 

(在驗證器中,第一個&後面的「p」標記爲紅色,表示失敗點)。

回答

34

嘗試把你的JavaScript中的CDATA塊中是這樣的:

<script type="text/javascript"> 
<![CDATA[ 
// content of your Javascript goes here 
]]> 
</script> 

應該讓它通過驗證。爲了更加安全,您可以添加周圍的CDATA標籤的Javascript意見從舊的瀏覽器誰不明白的CDATA標籤隱藏起來:

<script type="text/javascript"> 
/* <![CDATA[ */ 
// content of your Javascript goes here 
/* ]]> */ 
</script> 
+6

那。或者可以使用\ u0026(我認爲這是&的代碼) – Strelok 2008-12-10 04:12:21

+1

這很完美。第一個答案不起作用,但第二個答案。謝謝您的幫助! – 2008-12-10 04:15:29

0

我會嘗試:

var dataString = "email="+username+"&amp;password="+password+"&amp;remember="+remember; 
20

「\ u0026」 的作品!

0

有時\u0026&#38%26&amp,或&符號在XHTML <![CDATA[ ... ]]>工作的腳本塊。
我想問爲什麼我們應該想要這種限制(眨眼忠誠於SGML設計中的錯誤),這也阻止了&nbsp,mathml,targetnested xml的工作。
爲什麼我們不能簡單地說在腳本塊中沒有標籤或其他SGML內容被識別?爲什麼不能讓xhtml讓目標工作?
我不認爲SGML的優勢超過了缺點。現在,儘管html5有些可用,但xhtml是能夠捕獲最多開發人員錯誤的驗證程序。讓我們修復xml,沒有歷史考慮它的起源。

相關問題