【PHP8.x】C14Nメソッドの使い方

C14Nメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

C14Nメソッドは、Dom\Documentクラスに属し、XML文書の正規化(Canonicalization)を実行するメソッドです。XML文書は、同じ内容であっても、空白文字の扱い方や属性の順序、名前空間の宣言方法など、様々な物理的な表現の違いを持つことがあります。このメソッドは、これらの見た目上の違いを吸収し、XML文書を標準的かつ統一された形式の文字列に変換します。これにより、論理的に同じ内容を持つXML文書であれば、物理的な表現が異なっていても、常に同じ正規化された文字列として扱えるようになります。

この機能は、特にXML署名やXML暗号化など、セキュリティが重要な場面で非常に役立ちます。例えば、XML署名においては、署名対象のXML文書がわずかに変更された場合でも、正規化によって常に同じ形式に変換されるため、署名の検証が正確に行われ、文書の改ざんを確実に検出できます。

C14Nメソッドは、排他的C14Nを使用するかどうか、コメントを含めるかどうか、あるいはXML文書全体ではなく特定のXPath式で指定されたノードセットのみを対象とするかなど、正規化の挙動を詳細に制御するためのオプション引数をサポートしています。メソッドが実行されると、正規化されたXML文書の文字列が戻り値として返されます。XML文書の信頼性や異なるシステム間での互換性を保証するために不可欠な機能の一つです。

構文(syntax)

1<?php
2$domDocument = new Dom\Document();
3$domDocument->loadXML('<root><child attribute="value">text</child><!-- comment --></root>');
4
5$canonicalizedXml = $domDocument->C14N(
6    exclusive: false,
7    with_comments: false,
8    xpath: null,
9    ns_prefixes: null
10);

引数(parameters)

bool $exclusive = false, bool $withComments = false, ?array $xpath = null, ?array $nsPrefixes = null

  • bool $exclusive: true を指定すると、正規化される要素のサブセットのみを対象にします。デフォルトは false です。
  • bool $withComments: true を指定すると、コメントノードも正規化の対象に含めます。デフォルトは false です。
  • ?array $xpath: 正規化する要素を XPath 式の配列で指定します。null の場合はドキュメント全体が対象です。
  • ?array $nsPrefixes: 特定の名前空間プレフィックスのみを正規化の対象に含める場合に指定します。null の場合はすべて考慮されます。

戻り値(return)

string|false

このメソッドは、XML文書の標準的な表記形式(C14N)に正規化された文字列を返します。正規化に失敗した場合は false を返します。

関連コンテンツ