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

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

作成日: 更新日:

基本的な使い方

C14Nメソッドは、Dom\Attrオブジェクトが表すXML属性ノードを、Canonical XML(C14N)形式の正規化された文字列として取得するメソッドです。Dom\Attrクラスは、HTMLやXML文書内で、例えば<div id="myDiv">という要素のid="myDiv"のような属性を表現します。

このC14Nメソッドは、与えられた属性ノードの内容を、デジタル署名やXML文書の比較などにおいて、常に一貫した表現を保証するために定められた標準的なXML表現規則であるCanonical XMLに従って変換します。これにより、同じ論理的な内容を持つ属性であっても、異なる書式や宣言で表現される可能性のあるXML文書から、バイト列としても完全に同一の表現を得ることが可能になります。

メソッドは二つのオプション引数を取ります。一つ目の$exclusive引数は、排他的Canonical XML形式を使用するかどうかをブール値で指定します。排他的C14Nは、特にWebサービスのメッセージ署名などで利用され、不必要な名前空間の宣言を含まない簡潔な表現を生成します。二つ目の$withComments引数は、コメントノードを正規化された出力に含めるかどうかをブール値で制御します。これらの引数を利用することで、特定の要件に合わせた正規化された属性の文字列を得ることができ、このメソッドは結果として生成された正規化済み文字列を返します。

構文(syntax)

1<?php
2
3$document = new DOMDocument();
4$element = $document->createElement('example');
5$attribute = $document->createAttribute('id');
6$attribute->value = 'item-123';
7$element->appendChild($attribute);
8$document->appendChild($element);
9
10// Dom\Attr クラスの C14N メソッドの呼び出し
11$c14nOutput = $attribute->C14N(true, false);
12
13?>

引数(parameters)

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

  • bool $exclusive = false: trueに設定すると、属性の正規化時に名前空間宣言を親要素に移動させます。
  • bool $withComments = false: trueに設定すると、コメントノードも正規化の対象に含めます。
  • ?array $xpath = null: 正規化する要素をXPathクエリで指定します。
  • ?array $nsPrefixes = null: 正規化の際に含める名前空間プレフィックスの配列を指定します。

戻り値(return)

string|false

C14N メソッドは、属性ノードを正規化された文字列形式で返します。正規化に失敗した場合は false を返します。

関連コンテンツ

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