目的
PHPでWYSIWYGを利用する場合によく用いられる"htmlpurifier"のライブラリを使用しております。
それぞれバージョンは以下の通りです。
利用しているver
htmlpurifier:4.13.(サービス)
php:7.3.8
以下のようにHTML.AllowedAttributes
で要素の属性の組み合わせを設定した結果、動画や画像については,figure.class','figure.style','oembed.url','img.src'
あたりで設定指定にも関わらず、タグが削除されてしまうことが判明いたしました。
php
1 require_once '../package/htmlpurifier/library/HTMLPurifier.auto.php'; 2 3 $allowed = ['p.style','span.class','span.style','strong','i','u','s','blockquote','sub','sup','ul.style','li','ol.style','hr','div.class','div.style','a.href','figure.class','figure.style','oembed.url','img.src']; 4 5 $config = HTMLPurifier_Config::createDefault(); 6 $config->set('HTML.DefinitionID', 'enduser-customize.html tutorial'); 7 $config->set('HTML.DefinitionRev', 1); 8 $def = $config->getHTMLDefinition(true); 9 $def->addAttribute('figure', 'class', 'style'); 10 $config->set('Core.Encoding', 'UTF-8'); 11 $config->set('Core.Language', 'ja'); 12 $config->set('HTML.AllowedAttributes', $allowed); 13 $purifier = new HTMLPurifier($config);
試したこと
そこで調べると常に新しいHTMLのバージョンにライブラリが対応しているわけではないため、場合によってはカスタムする必要があるような記事を見つけることができました。
ここで、例えばfigureタグ
のclass
やstyle
属性を許可するために以下のように実行してみました。
php
1 require_once '../package/htmlpurifier/library/HTMLPurifier.auto.php'; 2 3 $allowed = ['p.style','span.class','span.style','strong','i','u','s','blockquote','sub','sup','ul.style','li','ol.style','hr','div.class','div.style','a.href','figure.class','figure.style','oembed.url','img.src']; 4 5 $config = HTMLPurifier_Config::createDefault(); 6 $config->set('HTML.DefinitionID', 'enduser-customize.html tutorial'); 7 $config->set('HTML.DefinitionRev', 1); 8 $def = $config->getHTMLDefinition(true); 9 $def->addAttribute('figure', 'class', 'style'); 10 $config->set('Core.Encoding', 'UTF-8'); 11 $config->set('Core.Language', 'ja'); 12 $config->set('HTML.AllowedAttributes', $allowed); 13 $purifier = new HTMLPurifier($config);
すると以下のようなエラーが出力され、実行できませんでした。
Error
1Warning: Due to a documentation error in previous version of HTML Purifier, your definitions are not being cached. If this is OK, you can remove the %$type.DefinitionRev and %$type.DefinitionID declaration. Otherwise, modify your code to use maybeGetRawDefinition, and test if the returned value is null before making any edits (if it is null, that means that a cached version is available, and no raw operations are necessary). See Customize for more details in /Applications/MAMP/htdocs/textile/package/htmlpurifier/library/HTMLPurifier/Config.php on line 901 2 3Fatal error: Cannot set directive after finalization in /Applications/MAMP/htdocs/textile/package/htmlpurifier/library/HTMLPurifier/Config.php on line 901
バージョンが古い等の指摘があるようなのですが、サービスにもある通り、最新のものをDLして利用しているのですが、原因や解決法について、知見のある方がいらっしゃればお力添え頂けますと幸いです。
よろしくお願い申し上げます。
あなたの回答
tips
プレビュー