Có vẻ như ra khỏi hộp, không có sự khác biệt
function esc_html( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in HTML.
*
* Text passed to esc_html() is stripped of invalid or special characters
* before output.
*
* @since 2.8.0
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'esc_html', $safe_text, $text );
}
function esc_attr( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in an HTML attribute.
*
* Text passed to esc_attr() is stripped of invalid or special characters
* before output.
*
* @since 2.0.6
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'attribute_escape', $safe_text, $text );
}
Sự khác biệt duy nhất giữa 2 chức năng là bộ lọc được áp dụng ở cuối. WordPress không thêm bất cứ thứ gì vào các bộ lọc này, vì vậy trong bản cài đặt WP tiêu chuẩn, chúng không hoạt động. Họ được cung cấp trong trường hợp cạnh mà ai đó có thể cần chúng.
Hỏi đáp nhanh
Vậy mặc định chúng giống hệt nhau?
Đúng! Các chức năng esc_attr
và esc_html
có cùng thực hiện
Các bộ lọc có giống nhau không?
Sự khác biệt duy nhất là chúng có các tên khác nhau, chúng hoạt động theo cùng một cách, chúng được sử dụng theo cùng một cách và không có bộ lọc nào được sử dụng trong lõi.
Làm các bộ lọc làm bất cứ điều gì?
Không! Tất cả các thoát được thực hiện trong chức năng khi wp_check_invalid_utf8
và _wp_specialchars
được gọi.
Các bộ lọc không thực hiện thoát, chúng là cơ hội để các plugin thực hiện kiểm tra và xử lý bổ sung.
Có trường hợp cạnh?
Chỉ khi bạn sử dụng các bộ lọc, hãy nói rằng bạn đã nối vào esc_html
nhưng không attribute_escape
hoặc ngược lại. Đối với cài đặt WP tiêu chuẩn, 2 chức năng giống hệt nhau, không có sự khác biệt.
Tại sao attribute_escape
và không esc_attr
?
Tương thích ngược. Đã từng có một attribute_escape
hàm, hiện được đánh dấu là không dùng nữa sau khi các esc_
hàm kiểu được thêm vào.
Tại sao tôi nên sử dụng các bộ lọc này?
¯\_(ツ)_/¯
đây sẽ là một tình huống hiếm gặp Một số người có thể lạm dụng nó theo cùng cách API dịch thuật bị lạm dụng để tìm kiếm văn bản thay thế. Đây là một thực tế tồi tệ vì những bộ lọc đó được gọi là rất nhiều sự mất tốc độ nhỏ được phóng to hàng ngàn lần
Nhưng hãy cân nhắc rằng nếu bạn không cẩn thận, bạn có thể làm tổn hại đến tính bảo mật của các chức năng này bằng cách hoàn tác việc thoát mà họ đã thêm hoặc thêm nội dung không được giải quyết vào cuối. Vì lý do đó các bộ lọc là nguy hiểm.
Tôi có cần phải lo lắng về điều này?
Không. Bạn chỉ cần lo lắng nếu bạn đã sử dụng các bộ lọc đó, chính nó đã đặt ra các báo động đỏ khổng lồ rằng có gì đó trong quá trình phát triển của bạn đã sai nghiêm trọng.
Các chức năng esc_attr
và esc_html
an toàn để sử dụng, và thoát nội dung. Bạn có nghĩa vụ đạo đức và đạo đức để sử dụng chúng nếu bạn coi trọng tính bảo mật của mã của bạn
Điều này có nghĩa là tôi chỉ nên sử dụng esc_html
?
Không, thoát là tất cả về thiết lập kỳ vọng. Nếu bạn đang mong đợi một thuộc tính, sử dụng esc_attr
. Chỉ vì nó hoạt động giống nhau vào lúc này, không có nghĩa là sẽ không thay đổi trong tương lai với bản phát hành bảo mật