在WordPress中,我有一个字符串,我无法控制(用户生成(的内容。例如,假设您有以下内容:
$string = 'before <p class="test-class" style="font-family: "Brush Script Mt";">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'
但是,如果您删除"
部件,则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。您可能应该用单引号(撇号(替换"
或直接删除它们。
如果你要让它留下这些引号,你最终会得到:
before <p class="test-class" style="font-family: "Brush Script Mt";">text</p> after
那些嵌套的引号会破坏 HTML。保留样式属性style="font-family: "
,其余属性希望被浏览器忽略。
所以我要补充:
$string = str_replace( """, "", $string );