HTML Title
ノードタイトルで限定的なHTMLマークアップを有効にし、イタリック、上付き文字、下付き文字、その他のインライン要素によるフォーマットをサポートします。
html_title
インストール
composer require 'drupal/html_title:8.x-1.6'
概要
HTML Titleモジュールは、Drupalコアにおけるノードタイトルがプレーンテキストに制限され、HTMLマークアップをサポートしないという制限に対処します。これは、イタリック体が必要な書籍タイトル、下付き文字や上付き文字が必要な科学表記、商標記号など、フォーマットされたタイトルが必要なコンテンツでは問題になります。
このモジュールは、設定可能なHTMLタグのセット(<em>、<sub>、<sup>、<b>、<i>、<strong>、<cite>、<code>、<bdi>、<wbr>、<br>など)をノードタイトル内で使用できるようにします。XSS脆弱性や問題のあるネスト(リンク内のリンクなど)を防ぐため、その他すべてのマークアップはフィルタリングされます。
このモジュールは、Drupalのページタイトル、パンくずリスト、Views、検索結果、ノード編集フォームとシームレスに統合され、セキュリティを維持しながらサイト全体でHTMLフォーマットが適切にレンダリングされることを保証します。
Features
- ノードタイトルで許可するHTMLタグの設定可能なホワイトリスト
- 許可されていないHTMLタグをフィルタリングすることによる自動XSS保護
- ノード表示および編集ページでのHTMLレンダリングによるページタイトルサポート
- HTMLフォーマットされたノードタイトルを表示するパンくずリスト統合
- タイトルフィールドでHTMLをレンダリングする専用のnode_html_titleフィールドプラグインによるViews統合
- 検索一覧でフォーマットされたタイトルを表示する検索結果統合
- HTMLフォーマットされたテキストを表示するためのstringフィールド用フィールドフォーマッター
- 適切なXML出力のためにHTMLタグを除去するRSSフィード統合
- 保存後にフォーマットされたタイトルを表示するノード確認メッセージサポート
- HTMLタイトルの多言語/翻訳サポート
- タイトルフィールドを使用するViews設定を保持する安全なアンインストール
Use Cases
書籍と出版物のタイトル
図書館、出版社、学術サイトでは、適切なイタリック体で書籍タイトルを表示する必要があることがよくあります。例えば、「The <em>Origin of Species</em> by Charles Darwin」をノードタイトルとして入力し、サイト全体で正しく表示できます。
科学および数学表記
科学的なコンテンツでは、上付き文字や下付き文字が頻繁に必要になります。「H<sub>2</sub>O」のような化学式や「E=mc<sup>2</sup>」のような数式をノードタイトルで直接使用できます。
商標および著作権記号
ビジネスや製品サイトでは、「Acme Products<sup>™</sup>」や「Widget Pro<sup>®</sup>」のように、上付き文字を使用してコンテンツタイトルに商標記号を含めることができます。
複数行タイトル
<br>タグを使用して、コンテンツ作成者は詩のタイトルやフォーマットされた見出しなど、スタイル目的で複数行のタイトルを作成できます。
強調されたキーワード
教育的または説明的なコンテンツでは、<strong>や<em>タグを使用してタイトル内のキーワードを強調し、重要な概念に注目を集めることができます。
Tips
- 許可するタグは最小限のセットから始め、必要に応じて追加してください。デフォルトの<br>、<sub>、<sup>は、不要なフォーマットオプションを公開することなく一般的なユースケースをカバーします。
- モジュールは設定されたタグのみを許可することでXSSから保護しますが、セキュリティの問題や問題のあるネストを引き起こす可能性のある<script>、<style>、<a>などの潜在的に危険なタグを追加することは避けてください。
- Viewsを使用する場合、「エンティティへのリンク」設定はHTMLタイトルで正しく機能します - リンクはフォーマットされたタイトルを適切にラップします。
- モジュールはViewsを壊すことなく安全にアンインストールできます。インストール時にフィールドプラグインプロバイダーを「node」に更新するためです。
- ノードタイトル以外のフィールドでは、「HTML-titleテキスト」フォーマッターを任意のstringフィールドで使用して、同じHTMLフィルタリングを適用できます。
Technical Details
Admin Pages 1
/admin/config/user-interface/html_title
ノードタイトルで許可するHTMLタグを設定します。許可するタグをスペース区切りで<tag>形式で入力します。指定されたタグのみがノードタイトルでHTMLとしてレンダリングされ、その他のHTMLはセキュリティのために除去されます。
権限 1
Hooks 9
hook_preprocess_page_title
ノード表示および編集ページでノードタイトルのHTMLマークアップをレンダリングするためにページタイトルを前処理します
hook_preprocess_breadcrumb
ノードを参照するパンくずリストリンクでHTMLマークアップをレンダリングするためにパンくずリストを前処理します
hook_preprocess_search_result
検索一覧に表示されるノードタイトルでHTMLマークアップをレンダリングするために検索結果を前処理します
hook_preprocess_field__node__title
フィールドとして表示される際にHTMLマークアップをレンダリングするためにノードタイトルフィールドを前処理します
hook_views_data_alter
デフォルトのノードタイトルフィールドハンドラーをカスタムnode_html_titleハンドラーに置き換えるためにViewsデータを変更します
hook_views_plugins_field_alter
モジュールのアンインストール後もViewsが動作し続けるように、node_html_titleのプロバイダーを'node'に変更するためにViewsフィールドプラグインを変更します
hook_theme_registry_alter
HTML Titleの前処理関数が最後に実行され、他のテーマ実装をオーバーライドするようにテーマレジストリを変更します
hook_node_view
タイトルがノードのビルド配列に表示される際にHTMLタイトルフィルタリングを適用するためにノードビューを変更します
hook_form_node_form_alter
ノード確認メッセージをHTMLフォーマットされたタイトルに置き換えるカスタム送信ハンドラーを追加するためにノードフォームを変更します
Troubleshooting 5
/admin/config/user-interface/html_titleで目的のタグが許可タグリストに追加されているか確認してください。デフォルトでは、<br>、<sub>、<sup>のみが有効です。
これは想定された動作です。モジュールは有効なXMLを確保するためにRSS出力からHTMLタグを自動的に除去します。RSSリーダーは通常、タイトル要素のHTMLをサポートしません。
モジュールを有効にした後、すべてのキャッシュをクリアしてください。Viewsデータの変更が有効になるにはキャッシュの再構築が必要です。
モジュールには、前処理関数が最後に実行されるようにテーマレジストリの変更が含まれています。問題が続く場合は、テーマキャッシュをクリアしてみてください。
キャッシュをクリアし、モジュールが適切に有効になっていることを確認してください。モジュールはLayout Builderをサポートしていますが、初期セットアップ後にキャッシュのクリアが必要な場合があります。
Security Notes 4
- モジュールは、DrupalのXss::filter()関数とDOMDocument解析を組み合わせて使用し、HTMLコンテンツを安全にフィルタリングしてXSS攻撃を防ぎます。
- 許可タグリストで明示的に設定されていないすべてのHTMLタグは、表示前にタイトルから除去されます。
- 「administer html title settings」権限はアクセスが制限されており、タイトルでHTMLを許可することのセキュリティ上の影響を理解している信頼できる管理者にのみ付与する必要があります。
- セキュリティの脆弱性を引き起こす可能性があるため、<script>、<iframe>、<object>、<embed>、<a>などの潜在的に危険なタグを許可タグリストに追加することは避けてください。