转义属性的原因是确保值中没有任何字符会破坏元素的HTML。例如,如果您没有逃脱:
$attr = \'foo"> <script>alert("Bad!");</script>\';
那么这个:
<div class="<?php echo $attr; ?>"></div>
将输出:
<div class="foo"> <script>alert("Bad!");</script>"</div>
这样脚本就可以运行了。
所以wp_kses_post()
这是完全错误的,因为它不会阻止这一点,因为它不会为属性转义字符。这是什么esc_attr()
是,但不能将其用于当前代码,因为数组包含属性名和=""
. 意味着已经太晚了$attribute
因为在不破坏属性的情况下,无法转义值。
但问题是:除了一个属性外,所有属性都是由您编码的!逃逸任何类都没有意义,因为它们不是来自潜在的不安全用户输入。唯一需要转义的值是$option[\'transition\']
, 因为它来自一个保存的选项。但你已经这么做了。
但是要回答标题中的问题,如果有人来搜索,批量转义属性的方法是将值放入数组并使用array_map()
要运行esc_attr()
在所有的人身上。
看这个例子,想象$attribute
最初填充了不安全的输入:
$attribute = array(
\'attr1\',
\'attr2\',
\'attr3\',
\'attr4\',
\'attr5\',
);
$attribute = array_map( \'esc_attr\', $attribute );