DataAttributeTransform
extends HTMLPurifier_AttrTransform
in package
すべての要素で `data-*` 属性を素通しさせる AttrTransform。
HTMLPurifier は宣言済みの属性しか通さず、data-* のワイルドカード宣言を持たない。一方で
外部サービスの埋め込みスニペットは data-instgrm-permalink / data-bluesky-uri /
data-formrun-form のような独自 data 属性に依存しており、これが落ちると script を許可しても
埋め込みがレンダリングされない。サービスが増えるたびにコアへ属性宣言を足す運用は破綻するため、
data 属性は一律で通す。
同一インスタンスを pre / post の両方に登録して使う(HTMLPurifier 同梱の AttrTransform_ScriptRequired と同じ形)。AttrValidator は1トークンにつき 「global pre → element pre → 属性検証 → global post → element post」を同期的に実行し、 post で戻した属性は再検証しないため、pre で退避して post で戻せば宣言なしでも通せる。
Why not post だけを登録して CurrentToken から元の属性を読まないか: AttrValidator は CurrentToken が未登録のときしか登録しないため、Injector が生成したトークンを検証する経路では CurrentToken が別の要素を指しうる。退避方式ならその取り違えが起きない。
Why not 属性値を検証しないか: data 属性の値は出力時に Generator がエスケープするため、値経由で タグや属性を閉じることはできない。値の意味を解釈するのは埋め込み先の JS であり、HTMLPurifier 側で 検証できる普遍的なルールは無い。
Table of Contents
Constants
- DATA_ATTRIBUTE_PATTERN = '/\Adata-[A-Za-z0-9_.:-]+\z/'
- 通す属性名の形式。HTML の data-* 属性の命名(`data-` に続く1文字以上)に限定し、 `datafoo` のような紛らわしい属性名は通さない。
Properties
- $stashed : array<string, mixed>|null
- pre 呼び出しで退避した data 属性。post 呼び出しで消費する。
Methods
- transform() : array<string|int, mixed>
- collectDataAttributes() : array<string, mixed>
- 属性配列から data 属性だけを抜き出す。
Constants
DATA_ATTRIBUTE_PATTERN
通す属性名の形式。HTML の data-* 属性の命名(`data-` に続く1文字以上)に限定し、 `datafoo` のような紛らわしい属性名は通さない。
private
mixed
DATA_ATTRIBUTE_PATTERN
= '/\Adata-[A-Za-z0-9_.:-]+\z/'
Properties
$stashed
pre 呼び出しで退避した data 属性。post 呼び出しで消費する。
private
array<string, mixed>|null
$stashed
= null
null なら次の呼び出しは pre。AttrValidator は1トークン分の pre → 検証 → post を 同期的に実行し、pre と post は必ず対で呼ばれるため、この1枠で pre / post を判別できる。
Methods
transform()
public
transform(array<string|int, mixed> $attr, HTMLPurifier_Config $config, HTMLPurifier_Context $context) : array<string|int, mixed>
Parameters
- $attr : array<string|int, mixed>
-
属性の連想配列
- $config : HTMLPurifier_Config
- $context : HTMLPurifier_Context
Return values
array<string|int, mixed> —処理後の属性配列
collectDataAttributes()
属性配列から data 属性だけを抜き出す。
private
collectDataAttributes(array<string|int, mixed> $attr) : array<string, mixed>
Parameters
- $attr : array<string|int, mixed>