在WordPress模板中安全输出Html的安全/好方法是什么?

时间:2018-05-12 作者:coolpasta

假设我有一个函数returns 处理完成后的HTML输出:

function parse_html_for_images() {
    return \'<img src="\' . thumbnail_url() . \'">\';
}
我需要输出这个字符串,比如说,用于自定义构建页面上帖子的缩略图。

我的心思转到echo parse_html_for_images() 但这感觉有点弱,听我说:

echo 对我来说,感觉就像是“在此之后完成所有事情,不要输出任何其他内容”。

然后我发现ob_start 这为我创造了一个缓冲区。这正是我的想法“好吧,一个我可以保存大量数据的地方,而不用在完成所有事情之前输出数据”。

但这会不会与,esc_html_ 还有诸如此类的人?

有什么指导方针吗?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

这取决于上下文。在模板中,您只需回显它:

<div>
    <?php echo parse_html_for_images(); ?>
</div>
在函数中,您可能希望将其与其他内容连接起来:

function wpse_303376_thumbnail() {
    return \'<div>\' . parse_html_for_images() . \'</div>\';
}
在具有许多其他标记的短代码回调中,您可能希望使用输出缓冲,因为短代码需要您return 整个输出:

function wpse_303376_shortcode() {
    ob_start();

    echo \'<div>\';
    echo parse_html_for_images();
    echo \'</div>\';

    return ob_get_clean();
}
转义是一个完全独立的问题,它是关于确保不安全的数据(如用户输入)不能进行任何恶意操作或破坏标记。例如,您可能希望在函数中转义缩略图URL,以确保它是URL而不是脚本标记:

function parse_html_for_images() {
    return \'<img src="\' . esc_url( thumbnail_url() ) . \'">\';
}
但是没有必要逃避硬编码到模板或函数中的HTML,因为它是可预测的。

结束

相关推荐