Sự khác biệt giữa esc_html, esc_attr, esc_html_e, v.v.


12

Tôi đã nhận được phản hồi từ anh chàng bảo mật và anh ta chỉ ra rằng tôi nên sử dụng lối thoát người dùng phù hợp trong mã của mình. Vì vậy, tôi đã thực hiện một số nghiên cứu và tìm thấy chức năng thoát.

Sự khác biệt giữa chúng là gì? Khi nào tôi nên sử dụng esc_html()và khi esc_attr()nào? Và khi nào tôi nên sử dụng các chức năng này _e()vào cuối?


1
Bạn đã đọc tài liệu chưa?
Jacob Peattie

2
Có và điều đó làm tôi bối rối hơn nữa :(
baldrick 7/12/18

Câu trả lời:


19

esc_html()thoát khỏi một chuỗi để nó không được phân tích cú pháp dưới dạng HTML. Các nhân vật như <được chuyển đổi thành &lt;, ví dụ. Điều này sẽ giống với người đọc, nhưng điều đó có nghĩa là nếu giá trị là đầu ra <script>thì nó sẽ không được trình duyệt hiểu là thẻ script thực sự.

Sử dụng chức năng này bất cứ khi nào giá trị là đầu ra không được chứa HTML.

esc_attr()thoát khỏi một chuỗi để nó an toàn khi sử dụng trong một thuộc tính HTML, class=""ví dụ như. Điều này ngăn giá trị thoát ra khỏi thuộc tính HTML. Ví dụ: nếu giá trị là "><script>alert();</script>và bạn đã cố xuất nó trong thuộc tính HTML, nó sẽ đóng thẻ HTML hiện tại và mở thẻ script. Điều này là không an toàn. Bằng cách thoát khỏi giá trị, nó sẽ không thể đóng thuộc tính và thẻ HTML và xuất ra HTML không an toàn.

Sử dụng chức năng này khi xuất giá trị bên trong thuộc tính HTML.

esc_url() thoát khỏi một chuỗi để đảm bảo rằng đó là một URL hợp lệ.

Sử dụng chức năng này khi xuất ra một giá trị bên trong một thuộc tính href=""hoặc src="".

esc_textarea()thoát khỏi một giá trị để nó an toàn khi sử dụng trong một <textarea>phần tử. Bằng cách thoát một giá trị với hàm này, nó ngăn giá trị được xuất ra bên trong <textarea<từ đóng <textarea>phần tử và xuất ra HTML của chính nó.

Sử dụng chức năng này khi xuất một giá trị bên trong một <textarea>phần tử.

esc_html()esc_attr()cũng có phiên bản kết thúc bằng __(), _e()_x(). Đây là để xuất chuỗi có thể dịch.

WordPress có chức năng, __(), _e()_x(), cho outputting văn bản có thể được dịch. __() trả về một chuỗi có thể dịch, _e() lặp lại một chuỗi có thể dịch và _x()trả về một chuỗi có thể dịch với một bối cảnh nhất định. Bạn có thể đã nhìn thấy chúng trước đây.

Vì bạn không nhất thiết phải tin tưởng một tệp dịch để chứa các giá trị an toàn, sử dụng các hàm này khi xuất ra một chuỗi có thể dịch đảm bảo rằng các chuỗi được xuất không thể gây ra vấn đề tương tự được mô tả ở trên.

Sử dụng các hàm này khi xuất các chuỗi có thể dịch.


2
Lưu ý rằng theo mặc định, không có sự khác biệt giữa esc_htmlesc_attr, cùng một mã được sử dụng (chúng chỉ có một bộ lọc không sử dụng khác nhau): wordpress.stackexchange.com/questions/264698/
Lỗi

4

esc_htmlsẽ được sử dụng bên trong html, ví dụ giữa một <p>thẻ

<p><?php echo esc_html( $some_variable ); ?></p>

esc_attr sẽ được sử dụng để thoát các giá trị thuộc tính trên các thẻ html như vậy:

<p my-attribute="<?php echo esc_attr( $some_variable ); ?>"></p>

áp dụng _echo đến cuối là để sử dụng nó với các miền văn bản và sẽ tự động lặp lại nó cho bạn, ví dụ:

<p><?php esc_html_e( 'some-text', 'text-domain' ); ?></p>

<p my-attribute="<?php esc_attr_e( 'some-text', 'text-domain' ); ?>"></p>

ngoài ra _ecòn __có chức năng tương tự _enhưng không lặp lại nó để bạn có thể lưu trữ nó trong một biến.


2
_ekhông chỉ để lặp lại, nó là để bản địa hóa. Vì vậy, nó chỉ nên được sử dụng khi một chuỗi được truyền cho hàm và nên bao gồm một miền văn bản. Ví dụ cuối cùng của bạn là lạm dụng nó.
Jacob Peattie

@JacobPeattie xấu của tôi, tôi sẽ cập nhật ... EDIT Cố định
jrmd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.