在wordpress中,wp_kses()函数删除除了允许的标签和属性之外的html标签和属性:
$post = "<p class="sample">This is a picture.<img src="sample.jpg" height="333"/><br/></p>";
$allowed = array(
"p" => array(),
"img" => array(
"src" => array()
),
);
echo wp_kses($post, $allowed);
> <p>This is a picture.<img src="sample.jpg"/></p>
但是,我不能允许包含下划线的属性:
$post = "<p class="sample">This is a picture.<img src="sample.jpg" height="333" under_bar="some" /><br/></p>";
$allowed = array(
"p" => array(),
"img" => array(
"src" => array(),
"under_bar" => array()
),
);
echo wp_kses($post, $allowed);
> <p>This is a picture.<img src="sample.jpg"/></p>
我知道我应该使用其他名称,但我想知道使用underbar的解决方案。
提前致谢。
答案 0 :(得分:0)
我很确定没有解决方法,至少在其表单中不使用wp_kses()
。如果您查看the code,您会发现WordPress在certain point处使用此属性under_bar="some"
解析属性名称,以及稍后的值:< / p>
if ( preg_match('/^([-a-zA-Z:]+)/', $attr, $match ) ) {
$attrname = $match[1];
$working = $mode = 1;
$attr = preg_replace( '/^[-a-zA-Z:]+/', '', $attr );
}
为清楚起见,它使用正则表达式来获取属性名称,并且它不接受下划线。结果,它继续认为您的属性被称为under
,并且无法在允许的标签列表中找到它(即使它找到了它,其余的也可能因为名称错误而无效)
最容易做的事情可能只是使用破折号。您可以尝试巧妙地使用过滤器钩子来执行与wp_kses()
不同的操作,但我认为它基本上就像重写整个事物。
答案 1 :(得分:0)
很可能。这是一个例子;
<?php
$row_content = '<i class="fa fa-twitter" aria-hidden="true"></i>';
$allowed_html = array(
'i' => array(
'class' => array(),
'href' => array(),
'rel' => array(),
'title' => array(),
'aria-hidden' => array()
)
);
?>
<?php echo wp_kses( $row_content, $allowed_html ); ?>