Я хочу разрешить только элемент span только тогда, когда он имеет определенный класс в htmlpurifier
кто-нибудь знает, как это сделать, прямо сейчас у меня есть
$config->set('HTML.Allowed','a[href],p,ol,li,ul,img[src],blockquote,em,span[class]'); $config->set('Attr.AllowedClasses',"allowed");
но это разрешает все пролеты и только разрешает класс, который мне нравится, только разрешает «разрешенный» класс, но я хочу, чтобы он разрешал span, когда значение его класса «разрешено»,
благодаря
Специальное решение: переопределить требуемый класс в промежутке и установить его так, чтобы он имел N возможных значений. Требование сделать это приведет к удалению тега, если он не существует.
Хорошо, поэтому, основываясь на предположении Ambush-comander, я смог удалить все промежутки, у которых не было определенного класса, идея состоит в том, что если класс, который ему нужен, то он не имеет этого класса, элемент будет удален.
Я провел некоторое исследование и нашел страницу настройки htmlpurifier, в которой объясняется, как добавить атрибут в соответствии с их инструкциями. Мне нужно только добавить четыре строки кода, вот как это я сделал
// more configuration stuff up here $config->set('HTML.DefinitionID', 'enduser-customize.html editor'); $config->set('HTML.DefinitionRev', 1); $def = $config->getHTMLDefinition(true); $def->addAttribute('span', 'class*', new HTMLPurifier_AttrDef_Enum( array('allowed') )); // purify down here
* в классе делает класс requried и becuse, мы разрешаем только разрешенный класс, все остальное становится полосатым. теперь есть одно предостережение сделать это таким образом. если кто-то помещает этот класс в это место, тогда это будет разрешено в моем случае. Я не использую «разрешено». Я использую что-то другое, которое будет заменено на html purifier
кто-то еще
и благодаря засаде и розовому для всей их помощи!
Вы оставили комментарий по моему аналогичному вопросу . У меня все еще нет решения из-за порядка инжектора / очистки, который в моем случае является ключевым, но решение для инжектора должно работать для вас, так как вы не должны зависеть от предварительной обработки.
Насколько я вижу, у вас есть два достойных три четыре варианта:
Вы можете использовать решение атрибута в моем вопросе, чтобы очистить все атрибуты, если вы не возражаете против тегов с левым <span>
и </span>
в своем HTML. Если вы имейте в виду, вы можете объединить это решение с инжектором с заполнением пустой теги , хотя тогда порядок выполнения очень, скорее всего, повредит вас заново. (Итак, я думаю, если нет – превосходно, у вас есть ответ! :))
Вы можете использовать форсунки. Они представляют собой довольно обширную и детальную функцию HTML-очистителя, поэтому я не могу придумать пример, который поможет вам исправить ситуацию из коробки. Но! Возможно, вам захочется взглянуть на нить на форуме HTML Purifier, где был создан инжектор «Linkify» , это довольно тщательный подход к этой теме, не говоря уже о том, что инжектор, упомянутый в № 1, также поможет вам разобраться в них.
Что-то, что я сейчас изучаю для своих целей, – это встроенные методы DOM от PHP. Это прочная альтернатива, если # 1 и # 2 по какой-то причине выходят из-под вас, но, конечно, дорогостоящие ресурсы.
Обычные выражения. Я действительно упоминаю это как последнее средство, и это даже не серьезное предложение. Вероятно, было бы разумно безопасно использовать регулярное выражение на уже очищенном HTML, но похоже, что это пустая трата хорошего парсера HTML. (Но тогда, по общему признанию, так же как и # 3.)
Удачи.
В документации нет ничего о настройке значений атрибутов. Однако, если вы используете class
только один раз, я думаю, что никаких проблем не возникнет, если вы сделаете то, что вы написали. 😉