Chúng ta phải nhìn sâu hơn một chút ở đây để có câu trả lời cho câu hỏi của bạn.
Vì vậy, bloginfo
là một gói đơn giản xung quanh get_bloginfo
.
<?php
function bloginfo( $show='' ) {
echo get_bloginfo( $show, 'display' );
}
Lưu ý đối số thứ hai display
. Hãy xem những gì nó làm.
<?php
function get_bloginfo( $show = '', $filter = 'raw' ) {
// snip snip, $output is fetched somewhere in here
if ( 'display' == $filter ) {
if ( $url )
$output = apply_filters('bloginfo_url', $output, $show);
else
$output = apply_filters('bloginfo', $output, $show);
}
return $output;
}
Nếu bộ lọc được đặt thành display
đầu ra của get_bloginfo
thì chạy qua bộ lọc.
Thay vì mã hóa một cái gì đó giống như một cuộc gọi đến esc_html
trong một chức năng, WP sử dụng hệ thống hook riêng của nó để thực hiện mọi việc. Nơi để tìm thấy rằng nơi đó xảy ra là trong wp-includes/default-filters.php
. Một tìm kiếm nhanh bloginfo
trong tập tin đó cho thấy ...
<?php
// Format strings for display.
foreach ( array( 'comment_author', 'term_name', 'link_name', 'link_description', 'link_notes', 'bloginfo', 'wp_title', 'widget_title' ) as $filter ) {
add_filter( $filter, 'wptexturize' );
add_filter( $filter, 'convert_chars' );
add_filter( $filter, 'esc_html' );
}
bloginfo
được ẩn trong foreach
mảng. Như bạn có thể thấy, đầu ra của bloginfo
được thoát với esc_html
.
Nói cách khác, điều này:
<?php
bloginfo('name');
Tương đương với điều này:
<?php
echo esc_html(get_bloginfo('name'));
Hoặc này:
<?php
echo get_bloginfo('name', 'display');
Vì vậy, không, đầu ra của bloginfo
không cần phải thoát. Không có đầu ra get_bloginfo
nào miễn là đối số thứ hai được đặt thành display
.
Tuy nhiên, cảnh báo là bất cứ ai cũng có thể loại bỏ esc_html
bộ lọc khỏi bloginfo
. Vì vậy, nó có thể an toàn hơn chỉ để thoát khỏi đầu ra. Và, tất nhiên, nếu bạn đang sử dụng đầu ra bloginfo
cho bất cứ thứ gì ngoài màn hình HTML (ví dụ: trong thuộc tính alt của hình ảnh), bạn nên chạy nó qua esc_attr
.