wp_kses清理是删除有效的字体系列名称



在WordPress中,我有一个字符串,我无法控制(用户生成(的内容。例如,假设您有以下内容:

$string = 'before <p class="test-class" style="font-family: &quot;Brush Script Mt&quot;;">text</p> after';

然后需要在其上使用wp_kses,但样式部分被完全删除:

$a = wp_kses( $string, array(
'p' => array(
'class' => array(),
'style' => array()
)
) );
var_dump(  $a ); // returns 'before <p class="test-class">text</p> after'

但是,如果您删除&quot;部件,则wp_kses确实按预期工作:

$string = 'before <p class="test-class" style="font-family: Brush Script Mt;">text</p> after';

现在它确实输出

$b = wp_kses( $string, array(
'p' => array(
'class' => array(),
'style' => array()
)
) );
var_dump(  $b ); // returns 'before <p class="test-class" style="font-family: Brush Script Mt">text</p> after'

我无法更改源字体系列,并且字体系列名称("(周围总是带有引号,并且我还需要在字符串上使用wp_kses。

有没有办法让wp_kses接受带有"的字体系列?

你不应该试图让wp_kses()接受损坏的HTML。您可能应该用单引号(撇号(替换&quot;或直接删除它们。

如果你要让它留下这些引号,你最终会得到:

before <p class="test-class" style="font-family: "Brush Script Mt";">text</p> after

那些嵌套的引号会破坏 HTML。保留样式属性style="font-family: ",其余属性希望被浏览器忽略。

所以我要补充:

$string = str_replace( "&quot;",  "", $string );

最新更新