2011-10-17 51 views
20

Tôi có một vấn đề với các nhân vật đặc biệt như &, ä, vv và HTML viết mã hóa tương ứng của họ như &, ä, vvJavascript/jQuery mã hóa cho các ký tự đặc biệt khi sử dụng val()

  • Khi họ được sử dụng trong thẻ giá trị của các trường nhập, trình duyệt giải mã nó tự động, không có vấn đề gì cả.

  • Khi sử dụng) chức năng (jQuerys val, trình duyệt không có cơ hội để đánh giá nội dung một cách chính xác

    $("button").click(function(){ 
        $("#test").val("&"); 
    }); 
    

Bất kỳ ý tưởng?

+1

Thực sự không có mã hóa hoặc giải mã xảy ra khi bạn sử dụng phương pháp 'val'. Nếu bạn có một giá trị ban đầu trong trường, nó được giải mã khi HTML được phân tích cú pháp, không phải khi giá trị được đọc. Tại sao bạn cần phải sử dụng các giá trị mã hóa HTML ở đây ngay từ đầu? – Guffa

+0

Vì tôi muốn nhập dữ liệu vào các trường nhập động (dựa trên hộp chọn thả xuống, nơi bạn chọn tập dữ liệu). Và dữ liệu được chèn vào đây phải là XSS an toàn. – 1jr

+0

Bạn đang làm sai. Sử dụng một số mã hóa tùy ý không làm cho mã an toàn hơn nhưng ít hơn, bạn nên mã hóa giá trị đúng cách để nó được sử dụng. Nếu bạn đặt văn bản trong một chuỗi chữ, nó phải được mã hóa cho mục đích đó, không phải mã HTML. – Guffa

Trả lời

4

Hãy thử .html() chức năng:

$("#test").html("&"); 
30

Bạn có thể sử dụng lâu đời thực thể giải mã thủ thuật này:

$("button").click(function(){ 
    $("#test").val($("<div>").html("&amp;").text()); 
}); 

bản demo làm việc: http://jsfiddle.net/AndyE/XegGy/

Nó tạo ra một tạm thờiPhần tử, đặt mã HTML thành &amp; và sau đó nhận giá trị văn bản là &.

Các vấn đề liên quan