質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1104閲覧

htmlpurifierライブラリを使用しているが特定のタグや属性が意図せず消えてしまう

pegy

総合スコア245

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/05/10 06:26

目的

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タグclassstyle属性を許可するために以下のように実行してみました。

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して利用しているのですが、原因や解決法について、知見のある方がいらっしゃればお力添え頂けますと幸いです。

よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問