a-blog cms PHP API Reference

DataAttributeTransform extends HTMLPurifier_AttrTransform
in package

FinalYes

すべての要素で `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>
Return values
array<string, mixed>

        
On this page

Search results