wp_kses 清理正在删除有效的字体系列名称
wp_kses sanitization is deleting valid font family names
在 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 );
在 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 );