2011-02-04 55 views
5

Tôi có tập lệnh sau, mã hóa một số giá trị mà nó nhận được một cách hợp lý, nhưng dường như nó không mã hóa dấu ngoặc kép.Mã hóa HTML trước POST

Làm cách nào để mã hóa toàn bộ giá trị chính xác trước khi đăng?

function htmlEncode(value){ 
    return $('<div/>').text(value).html(); 
} 

Kịch bản trên cho tôi này:

&lt;p&gt;Test&amp;nbsp; &lt;span style="color: #ffffff"&gt;&lt;strong&gt;&lt;span style="background-color: #ff0000"&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; 

tôi cần nó để cho tôi này:

&lt;p&gt;Test&amp;nbsp; &lt;span style=&quot;color: #ffffff&quot;&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #ff0000&quot;&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; 

EDIT: Câu hỏi của followup: Encoded HTML in database back to page

+2

Dường như bạn đang cố gắng yêu cầu khách hàng tạo một số HTML văn bản an toàn trước khi gửi cho máy chủ. Đừng làm thế. Làm cho HTML nội dung an toàn trên đường ra khỏi hệ thống, không phải trên đường vào (và đặc biệt là không phải trên máy khách, nơi nó có thể bị làm xáo trộn) – Quentin

+0

Tại sao bạn cần thực hiện nó trên máy khách? – troutinator

+0

Tại sao bạn muốn nó cung cấp cho bạn '"'? Trừ khi bạn đang dự định chèn dữ liệu vào một giá trị thuộc tính (bạn trộn với nhau bằng cách sử dụng chuỗi thay vì sử dụng một DOM hoặc API hợp lý khác) thì bạn chỉ sử dụng 6 byte khi 1 sẽ làm và làm cho nó khó đọc hơn. – Quentin

Trả lời

7

Bạn shouldn' t cố gắng mã hóa mọi thứ bằng JavaScript.

Bạn nên mã hóa máy chủ.

Mọi thứ có thể được thực hiện bằng JavaScript đều có thể hoàn tác.

Việc mã hóa nó trong JavaScript là hợp lệ nếu bạn cũng kiểm tra xem mã đó có được mã hóa trên máy chủ hay không nhưng lưu ý: JavaScript có thể bị tắt.

+0

Tôi đã thử đăng html chuẩn lên máy chủ, nhưng tôi gặp lỗi khi nói rằng tôi cố gắng làm kịch bản lệnh chéo trang web hoặc điều gì đó dọc theo các dòng đó. Đây là một liên kết khi tôi cố gắng gửi html đến máy chủ mà không cần mã hóa nó. http://stackoverflow.com/questions/4897441/a-potentially-dangerous-request-form – oshirowanen

+1

@oshirowanen Tôi đoán bạn đang sử dụng 'vb.net', bạn phải tắt xác thực trang để có thể lấy nội dung Là. – BrunoLM

+0

Bạn đang sử dụng ngôn ngữ phía máy chủ của mình như thế nào? –

4

Điều George nói là đúng. Nhưng, nếu bạn phải mã hóa chuỗi phía máy khách, tôi khuyên bạn nên sử dụng JavaScript encodeURIComponent().

+2

'Các chức năng thoát và unescape không được chấp nhận. Sử dụng encodeURI, encodeURIComponent, decodeURI hoặc decodeURIComponent để mã hóa và giải mã các chuỗi thoát cho các ký tự đặc biệt. 'https://developer.mozilla.org/en/JavaScript/Reference/Deprecated_Features – BrunoLM

+3

Và W3Schools thật đáng sợ. http://w3fools.com – Quentin

1

Bạn có thể sử dụng mô-đun này trong js, mà không đòi hỏi jQuery:

htmlencode

0

Bạn có thể tái sử dụng chức năng từ php.js dự án - htmlentitiesget_html_translation_table

+0

Nó thực sự cần được thực hiện phía máy chủ. Dù sao, bạn nên sử dụng 'htmlspecialchars()' thay vì 'htmlentities()'. – nyuszika7h

-1

Sử dụng thoát (str) tại phía máy khách

HttpUtility.UrlDecode (str, System.Text.Encoding.De lỗi); ở phía máy chủ

nó làm việc cho tôi.

+0

Tôi không chắc bạn đã hiểu câu hỏi và điều này đặc biệt yêu cầu mã phía máy khách được gửi đến máy chủ. Nó cũng không đề cập đến máy chủ ở tất cả, vì vậy mã máy chủ bạn đã bao gồm rất có thể không có liên quan. –

+0

Có, Andrew bạn nói đúng. Tôi đã cho anh ta một mẹo để mã hóa phía máy khách.và ngoài ra tôi đã đề nghị anh ta làm thế nào để xử lý nó ở phía máy chủ, nếu nó là cần thiết, –

0

Tôi gặp sự cố tương tự. Tôi chỉ đơn giản là sử dụng phương pháp thay thế trong javascript. Dưới đây là một bài viết hay để đọc: http://www.w3schools.com/jsref/jsref_replace.asp

Về cơ bản, phương thức thay thế là hoán đổi hoặc thay thế ký tự được tìm thấy bằng những gì bạn chỉ định làm ký tự thay thế.

Vì vậy, đây:

var str=' " That " '; 
str = str.replace(/"/g,'&quot;'); 

Khi bạn đăng nhập này vào giao diện điều khiển của trình duyệt của bạn, bạn sẽ nhận được một cái gì đó giống như

&quot; That &quot; 

Và đây:

var str=' " That " '; 
str = str.replace(/"/g,'blahblahblah'); 

Khi bạn đăng nhập điều này vào giao diện điều khiển của trình duyệt, bạn sẽ nhận được một cái gì đó như

blahblahblah That blahblahblah