我们必须在这里更深入地了解您的问题。
因此,bloginfo
是一个简单的包装器get_bloginfo
。
<?php
function bloginfo( $show='' ) {
echo get_bloginfo( $show, 'display' );
}
注意第二个参数display
。让我们看看它能做什么。
<?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;
}
如果过滤器设置为,display
则输出get_bloginfo
通过过滤器运行。
esc_html
WP 并不是使用硬编码(例如调用函数中的调用),而是使用它自己的挂钩系统来执行操作。找到发生这种情况的地方是wp-includes/default-filters.php
。快速搜索bloginfo
该文件将发现...
<?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
隐藏在foreach
数组中。如您所见,的输出通过bloginfo
进行了转义esc_html
。
换句话说,这是:
<?php
bloginfo('name');
等效于此:
<?php
echo esc_html(get_bloginfo('name'));
或这个:
<?php
echo get_bloginfo('name', 'display');
因此,不,bloginfo
不需要转义的输出。get_bloginfo
只要第二个参数设置为,输出也不行display
。
但要注意的是,任何人都可以从中删除esc_html
过滤器bloginfo
。因此,仅逃避输出可能更安全。而且,当然,如果将的输出bloginfo
用于除HTML显示之外的任何内容(例如,在图像的alt属性中),则应通过进行运行esc_attr
。