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

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

作成日: 更新日:

基本的な使い方

C14Nメソッドは、XMLドキュメント内のCDATAセクションを表すDOMCdataSectionオブジェクトの内容を、Canonical XML(C14N)形式で正規化し、その結果を文字列として返すメソッドです。Canonical XMLとは、XMLドキュメントの物理的な表現の差異(例えば、空白文字の扱い、属性の順序、名前空間宣言の表記方法など)を吸収し、論理的に等価なXMLドキュメントであれば常に同じバイト列に変換する標準的なアルゴリズムです。

この正規化は、主にXMLドキュメントのデジタル署名やハッシュ計算において、ドキュメントの同一性を厳密に保証するために非常に重要です。異なる記述形式を持つが内容的には同じXMLが、確実に同じ署名やハッシュ値を生成できるようにします。

C14Nメソッドには、オプションとして排他的C14N(Exclusive C14N)モードを有効にするかどうか、またXMLコメントを含めるかどうかを真偽値で指定できます。排他的C14Nモードは、名前空間の宣言をより厳密に制御し、ドキュメントの特定の部分のみを正規化する際に使用されます。コメントを含めるかどうかは、正規化された出力にXMLコメントが含まれるかどうかに影響します。

本メソッドは、CDATAセクション内のテキストデータが、上記の正規化規則に従って統一された形式で出力されることを保証します。これにより、XMLデータの整合性検証や、セキュアな情報交換を行うシステムにおいて不可欠な機能を提供します。

構文(syntax)

1<?php
2$document = new DOMDocument();
3$cdataNode = $document->createCDATASection('Example CDATA content');
4$normalizedOutput = $cdataNode->C14N();

引数(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

このメソッドは、C14N(Canonical XML)形式の文字列を返します。C14N形式は、XML文書を正規化するための標準的な方法です。変換に失敗した場合は false を返します。

関連コンテンツ

関連プログラミング言語