Санитарная обработка wp_kses удаляет допустимые имена семейств шрифтов - PullRequest
0 голосов
/ 29 июня 2018

В 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 принимать font-family с помощью "?

1 Ответ

0 голосов
/ 29 июня 2018

Вы не должны пытаться заставить wp_kses() принять неработающий HTML. Вам, вероятно, следует либо заменить &quot; одинарной кавычкой (апостроф), либо просто удалить их.

Если бы вы оставили его в кавычках, вы бы получили:

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

Эти вложенные кавычки нарушат HTML. Оставьте атрибут style равным style="font-family: ", а остальные, будем надеяться, игнорируются браузером.

Так что я бы добавил:

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