我是这篇文章的原作者,希望我能详细阐述我的观点(“规则4”)。
这种情况下的“数据”是用户输入的值:
$raw = \'<textarea name="my-textarea"></textarea> Hello World\';
我们在两种上下文中以某种形式显示此数据:
前端视图,其中我们希望呈现用户输入的HTML;小部件管理视图,其中我们希望允许用户查看和编辑他们输入的HTML对于(1),我们可以执行以下操作:
class My_Widget extends WP_Widget {
...
public function widget( $args, $instance ) {
// outputs the content of the widget
...
echo $raw;
...
}
...
}
这是“好的”
通常,我们可能不希望小部件编辑器能够插入iFrame、脚本标记或不平衡的HTML,但为了便于说明,我们在这里是完全允许的。关键是,当我们在HTML页面中打印要呈现为HTML的变量内容时,我们不需要转义任何内容。But, 当我们希望以不同的格式显示同一变量时,我们必须以不同的方式对待它(即,我们希望在teaxtarea中打印标记,而不是实际将其呈现为HTML)。
class My_Widget extends WP_Widget {
...
public function form( $instance ) {
// This is wrong!
...
echo \'<textarea>\' . $raw . \'</textarea>\';
...
}
...
}
在上面,我们希望显示标记,而不是渲染它,但我们不采取任何措施来防止$raw
被解释为HTML。这是危险的;HTML is not safe as a value for the textarea. 而对于大多数HTML,如果包含</textarea>
表单将“中断”,并将HTML注入小部件管理页面,如本文所示。在这种情况下,转义意味着防止$raw
被解释为HTML。WordPress为该实例提供了一个有用的功能:
class My_Widget extends WP_Widget {
...
public function form( $instance ) {
// This is wrong!
...
echo \'<textarea>\' . esc_textarea( $raw ) . \'</textarea>\';
...
}
...
}