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

wp_kses sanitization is deleting valid font family names

在 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 );