Wp_kses忽略允许并允许所有内容

时间:2014-06-06 作者:longy

以下是一个示例:

$allowedPart = "<a href=\'http://alink.com\'></a>";
$unsafePart = "<h1>A title</h1>";
$unsafePart .= "<script>alert(\'a script!!!\');</script>";

$unsafeString = $allowedPart . $unsafePart;

$allowed = array("a"=>array(
                    "href"=>array()
           ));

$sanitizedString = wp_kses($unsafeString, $allowed);
$sanitizedString 应等于$allowedPart, 但出了点问题$sanitizedString 保持不变$unsafeString.

怎么了?

==========================

抱歉,保存到数据库后,我location.reload(), 因此,在textarea中保留了原始内容,但在数据库中,该值为almost 对的此次要问题通过以下方式解决:

window.location.href = window.location.href;

但是有一个问题,\'href\' disappears too, 为什么?

例如

<a href=\'http://alink.com\'>Link</a> 成为<a>Link</a>

尝试以下操作:$allowed = array( \'img\'=>array( \'src\'=>array(), ));

<img src=\'img.png\' /> 成为<img />

这就好像wp\\u kses()将子数组中的所有属性(如href或src)识别为不允许的,从而过滤它们及其内容。

==========================

用双引号代替单引号似乎可以解决问题。

$allowed = array( \'img\'=>array( \'src\'=>array(), ));

<img src="img.png" />

1 个回复
SO网友:engelen

wp_kses (Codex) 删除不允许的标记,但不会删除其内容。所以,如果你有一个“{something}”,wp_kses 只删除标记,不删除内容,返回“{something}”。因此,这是预期行为,您的问题似乎不是bug。

结束

相关推荐