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

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

作成日: 更新日:

基本的な使い方

C14Nメソッドは、DOMTextオブジェクトが表すテキストノードを、W3C勧告の仕様に基づいて正規化(正準化)し、その結果を文字列として取得するために実行するメソッドです。正規化とは、XML文書の論理的な意味を変えずに、空白の扱い、文字参照の展開、属性の順序といった物理的な表現を、定められた一貫性のある形式に変換する処理のことです。これにより、見た目上の記述が異なるXML文書でも、意味的に等価であれば全く同じ文字列を生成できます。この特性は、XMLデジタル署名などで文書の同一性を厳密に検証する際に不可欠となります。引数を用いることで、コメントノードを含めるかどうかの指定や、排他的正規化(Exclusive XML Canonicalization)の適用など、正規化のルールを細かく制御することが可能です。メソッドの実行に成功すると正規化されたノードの文字列を返しますが、処理に失敗した場合は false を返します。

構文(syntax)

1<?php
2
3// DOMDocumentオブジェクトを作成します
4$document = new DOMDocument();
5
6// XML文字列を読み込みます
7$document->loadXML('<root>Some sample text</root>');
8
9// テキストノードを取得します (<root>タグ内のテキスト部分)
10$textNode = $document->documentElement->firstChild;
11
12// DOMTextオブジェクトに対してC14N()メソッドを呼び出し、
13// 正規化された文字列を取得します。
14$canonicalizedString = $textNode->C14N();
15
16// 結果を出力します
17echo $canonicalizedString;
18
19?>

引数(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エンジニア