2008-12-10 12 views
29

Tôi đang cố gắng chuyển một dataString đến một cuộc gọi ajax bằng cách sử dụng JQuery. Trong cuộc gọi, tôi xây dựng các tham số get và sau đó gửi chúng đến trang php trên đầu nhận. Vấn đề là chuỗi dữ liệu có ký hiệu và chúng có hiệu lực nghiêm ngặt.Làm cách nào để thoát khỏi dấu và trong chuỗi javascript để trang xác thực nghiêm ngặt?

Đây là mã:

$(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; 
    }); 
}); 

và đây là một ví dụ về thông điệp xác nhận: không thể tạo ra nhận dạng hệ thống nói chung thực thể "password".

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

(trong trình xác thực "p" sau ký hiệu đầu tiên được đánh dấu màu đỏ cho biết điểm hỏng).

Trả lời

34

Hãy thử đặt javascript của bạn bên trong một khối CDATA như thế này:

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

mà nên làm cho nó vượt qua xác nhận. Để có thêm an toàn, bạn có thể thêm Javascript ý kiến ​​xung quanh các thẻ CDATA để ẩn chúng từ trình duyệt cũ hơn người không hiểu thẻ CDATA:

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

Điều đó. Hoặc có thể sử dụng \ u0026 (tôi nghĩ đó là mã cho &) – Strelok

+1

Điều đó thật hoàn hảo. Câu trả lời đầu tiên không hiệu quả nhưng câu trả lời thứ hai đã làm. Cảm ơn đã giúp đỡ! –

0

tôi sẽ cố gắng:

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

vâng, tôi đã thử điều đó rồi. Cảm ơn đã giúp đỡ. –

+0

Hoạt động trong XHTML, nhưng không hoạt động với XHTML tương thích HTML. – Quentin

6

Lưu ý: trước khi một đi gói văn bản một cách mù quáng trong các khối CDATA, lưu ý rằng mục đích của CDATA là NOT để làm cho các ký tự không hợp lệ hợp lệ.

Xem: http://www.flightlab.com/~joe/sgml/cdata.html

20

"\ u0026" hoạt động!

0

Đôi khi \u0026, &#38, %26, &amp hoặc <![CDATA[ ... ]]> hoạt động đối với ký hiệu trong khối tập lệnh trong xhtml.
Tôi muốn hỏi lý do tại sao chúng tôi nên muốn loại hạn chế đó (chớp lòng trung thành với các lỗi trong thiết kế SGML), đồng thời ngăn chặn &nbsp, mathml, targetnested xml không hoạt động.
Tại sao chúng ta không thể đơn giản nói rằng trong một khối tập lệnh không có thẻ hoặc các nội dung SGML khác được công nhận? Tại sao xhtml không cho phép các mục tiêu hoạt động?
Tôi không thấy một lợi thế nào đối với SGML vượt quá những bất lợi. Ngay bây giờ, mặc dù html5 có phần có sẵn, xhtml là trình xác thực bắt lỗi nhất của nhà phát triển. Hãy sửa xml mà không có liên quan lịch sử đến nguồn gốc của nó.