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

时间:2018-06-29 15:49:06

标签: php wordpress sanitization

在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接受带有“?”的字体系列?

1 个答案:

答案 0 :(得分:0)

您不应尝试获取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 );