【PHP8.x】C14Nメソッドの使い方
C14Nメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
C14Nメソッドは、DOM要素をXML正規化(Canonical XML)のルールに従って文字列として出力するメソッドです。このメソッドはDom\HTMLElementクラスに属しており、HTML要素だけでなく、XML構造を持つ任意のノードに対して適用できます。XML正規化とは、XML文書の論理的な内容を保持しつつ、物理的な表現の違い(例えば、属性の記述順序、名前空間の宣言方法、空白文字の扱いなど)を吸収し、常に一意の標準的な形式に変換するプロセスです。
具体的には、このメソッドは、呼び出された要素とその子孫ノードを、特定のルールに基づいて整形されたXML文字列として返します。これにより、デジタル署名の生成や検証、あるいはXML文書の厳密な比較を行う際に、元の文書の微妙な書式や表現の違いによって結果が不一致になることを防ぎます。
メソッドはオプションで2つのブール型引数を受け取ります。最初の引数$exclusiveをtrueに設定すると、排他的正規化(Exclusive XML Canonicalization)を行います。これは、XML文書の一部を正規化する際に、その部分に関連しない名前空間宣言を省略する方式です。2番目の引数$withCommentsをtrueに設定すると、コメントノードも正規化された出力に含めることができます。返される文字列は、正規化されたXMLデータとなります。システムにおいて、XMLデータの整合性を保証する上で重要な役割を果たします。
構文(syntax)
1<?php 2$htmlElement = new Dom\HTMLElement(); 3$canonicalizedString = $htmlElement->C14N(); 4?>
引数(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: 名前空間のプレフィックスと URI の連想配列を指定することで、正規化の際に使用する名前空間を限定できます。デフォルトは null です。
戻り値(return)
string|false
このメソッドは、XML Canonicalization (C14N) アルゴリズムを適用して、要素とその子孫の正規化された文字列表現を返します。正規化に失敗した場合は false を返します。