Intereting Posts
как реализовать sha 512, md5 и солевое шифрование всего за один пароль Обрезаемая фатальная ошибка: объект класса mysqli_stmt не может быть преобразован в строку Неверное преобразование PHP strtotime Что такое регулярное выражение MM / DD / YYYY и как его использовать в php? Как использовать echo в php-массиве для возврата в виде строки В PHP есть функция, которая возвращает массив, состоящий из значения ключа из массива ассоциативных массивов? PHP 35: ошибка: 14094410: SSL-процедуры: SSL3_READ_BYTES: sslv3 сбой при сбое Строковые функции PHP vs функции mbstring Как отправить только событие click (div) при использовании функции jquery live? Как создать рукопожатие между веб-сервером PHP и Socket.io на сервере node.js? Как выбрать отдельные значения из нескольких столбцов mysql и поместить их в один массив PHP? Как напечатать один комментарий в drupal? Должен ли я использовать <объект> или <iframe> для загрузки видео? Как создать вспомогательные методы на Laravel, а не фасад как получить результаты в реальном времени с помощью jquery?

HtmlPurifier – позволяет использовать данные

Я пытаюсь разрешить некоторый data-attribute data с htmlPurifier для всего моего span но никак …

У меня есть эта строка:

 <p> <span data-time-start="1" data-time-end="5" id="5"> <word class="word">My</word> <word class="word">Name</word> </span> <span data-time-start="6" data-time-end="15" id="88"> <word class="word">Is</word> <word class="word">Zooboo</word> </span> <p> 

Моя конфигурация htmlpurifier:

 $this->HTMLpurifierConfigInverseTransform = \HTMLPurifier_Config::createDefault(); $this->HTMLpurifierConfigInverseTransform->set('HTML.Allowed', 'span,u,strong,em'); $this->HTMLpurifierConfigInverseTransform->set('HTML.ForbiddenElements', 'word,p'); $this->HTMLpurifierConfigInverseTransform->set('CSS.AllowedProperties', 'font-weight, font-style, text-decoration'); $this->HTMLpurifierConfigInverseTransform->set('AutoFormat.RemoveEmpty', true); 

Я очищаю свое $value так:

 $purifier = new \HTMLPurifier($this->HTMLpurifierConfigInverseTransform); var_dump($purifier->purify($value));die; 

И получите следующее:

 <span>My Name</span><span>Is Zoobo</span> 

Но как сохранить мои атрибуты атрибутов data-time-start data-time-end в моем span ?

Мне нужно это:

 <span data-time-start="1" data-time-end="5" id="5">My Name</span data-time-start="6" data-time-end="15" id="88"><span>Is Zoobo</span> 

Я попытался протестировать эту конфигурацию:

 $this->HTMLpurifierConfigInverseTransform->set('HTML.Allowed', 'span[data-time-start],u,strong,em'); 

но сообщение об ошибке:

Предупреждение пользователя: атрибут «data-time-start» в элементе «span» не поддерживается (информацию об этом см. На форумах поддержки)

Спасибо за вашу помощь !!

ИЗМЕНИТЬ 1

Я попытался разрешить идентификатор в это время с помощью этой строки кода:

 $this->HTMLpurifierConfigInverseTransform->set('Attr.EnableID', true); 

Это не работает для меня …

EDIT 2

Для атрибутов data-* я добавляю эту строку, но ничего не произошло тоже …

 $def = $this->HTMLpurifierConfigInverseTransform->getHTMLDefinition(true); $def->addAttribute('sub', 'data-time-start', 'CDATA'); $def->addAttribute('sub', 'data-time-end', 'CDATA'); 

Solutions Collecting From Web of "HtmlPurifier – позволяет использовать данные"

HTML Purifier знает структуру HTML и использует это знание в качестве основы для своего процесса с белым листингом. Если вы добавите стандартный атрибут в белый список, он не разрешает произвольный контент для этого атрибута – он понимает атрибут и все равно будет отклонять контент, который не имеет смысла.

Например, если у вас был атрибут где-то, в котором принимались числовые значения, HTML Purifier все равно отрицал бы HTML, который пытался ввести значение «foo» для этого атрибута.

Если вы добавите пользовательские атрибуты, просто добавив его в белый список, он не научит HTML Purifier, как обрабатывать атрибуты: какие данные он может ожидать в этих атрибутах? Какие данные являются вредоносными?

Существует обширная документация о том, как вы можете показать HTML Purifier о структуре ваших настраиваемых атрибутов здесь: Настроить

Существует пример кода для атрибута «target» <a> -tag:

 $config = HTMLPurifier_Config::createDefault(); $config->set('HTML.DefinitionID', 'enduser-customize.html tutorial'); $config->set('HTML.DefinitionRev', 1); $config->set('Cache.DefinitionImpl', null); // remove this later! $def = $config->getHTMLDefinition(true); $def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top'); 

Это добавит target как поле, которое принимает только значения "_blank" , "_self" , "_target" и "_top" . Это немного строже, чем фактическое определение HTML, но для большинства целей вполне достаточно.

Это общий подход, который вам нужно будет предпринять для data-time-start data-time-end и времени data-time-end . Для возможной настройки ознакомьтесь с официальной документацией по очистке HTML (как указано выше). Мое лучшее предположение из вашего примера состоит в том, что вы не хотите Enum#... но Number , как это …

 $def->addAttribute('span', 'data-time-start', 'Number'); $def->addAttribute('span', 'data-time-end', 'Number'); 

… но проверьте это и посмотрите, что лучше всего подходит для вашего прецедента. (Хотя вы реализуете это, не забывайте, что вам также нужно перечислять атрибуты в белом списке, как вы сейчас делаете.)

Для id вы должны включить Attr.EnableID = true качестве части вашей конфигурации.

Надеюсь, это поможет!