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

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

作成日: 更新日:

基本的な使い方

C14Nメソッドは、Dom\DocumentFragmentオブジェクトが保持するXMLノードの構造を、標準化された形式(Canonical XML)に正規化するメソッドです。

この正規化は、XMLドキュメントの意味的な内容に一切変更を加えることなく、物理的な表現を一意にすることを目的としています。例えば、XMLの記述において、空白文字の有無、属性の順序、名前空間の宣言方法などが異なっていても、内容が同じであれば同じXMLとして扱えるように、定められた規則に従って統一された形式に変換します。

主にデジタル署名やハッシュ値の計算において、XMLドキュメントの同一性を厳密に保証するために利用されます。これにより、異なるシステムや処理環境で生成されたXMLであっても、その内容が同一であれば、署名検証時などに表現の差異を吸収し、常に同じXMLとみなすことが可能になります。

本メソッドには、オプションで引数を指定できます。例えば、$exclusive引数にtrueを設定することで、排他的な正規化(Exclusive XML Canonicalization)を適用し、要素内で使用されていない名前空間の宣言を削除するなど、名前空間の扱いをより厳密に制御できます。また、$with_comments引数でコメントを含めるか否かを指定したり、$xpath$ns_prefixes引数を利用して正規化の対象を特定のノードセットに限定したりすることも可能です。実行結果として、正規化されたXML文字列が返されます。

構文(syntax)

1<?php
2
3$dom = new DOMDocument();
4$fragment = $dom->createDocumentFragment();
5$element = $dom->createElement('item');
6$element->appendChild($dom->createTextNode('content'));
7$fragment->appendChild($dom->importNode($element, true));
8
9$canonicalOutput = $fragment->C14N();
10
11?>

引数(parameters)

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

  • bool $exclusive: trueの場合、指定されたXPath式に一致するノードのみを正規化します。falseの場合、ドキュメント全体を正規化します。
  • bool $withComments: trueの場合、コメントノードも正規化に含めます。falseの場合、コメントノードは無視されます。
  • array $xpath: 正規化するノードを指定するためのXPath式配列。nullの場合、ドキュメント全体が対象となります。
  • array $nsPrefixes: 名前空間プレフィックスの配列。正規化時にこれらのプレフィックスのみを使用します。nullの場合、ドキュメントで使用されているすべての名前空間プレフィックスが使用されます。

戻り値(return)

string|false

このメソッドは、XML文書の断片(Dom\DocumentFragment)を標準化された形式(C14N)の文字列で返します。正規化に失敗した場合はfalseを返します。

関連コンテンツ

【PHP8.x】C14Nメソッドの使い方 | いっしー@Webエンジニア