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

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

作成日: 更新日:

基本的な使い方

C14Nメソッドは、DOMDocumentFragmentオブジェクトに含まれるXMLノードの内容を、W3C勧告のXML正規化(Canonical XML、略称C14N)の規則に従って文字列として出力するメソッドです。この正規化は、XML文書の物理的な表現の違い(例えば属性の順序や名前空間宣言の書き方など)を吸収し、論理的に同一のXML内容が常に同じバイト列となるように変換するプロセスを指します。

主に、XMLデジタル署名において、署名の対象となるXML文書の内容が改ざんされていないことを検証する際に利用されます。DOMDocumentFragmentは、XML文書全体ではなく、その一部のノードの集まりを表しますが、このメソッドを使用することで、そのフラグメント部分のみを正規化できます。

このメソッドは、排他的正規化を適用するかどうか、コメントノードを含めるかどうか、正規化の対象とするノードをXPath式で指定するかどうかなど、いくつかのオプション引数を受け入れます。これらのオプションを適切に指定することで、正規化の挙動を細かく制御することが可能です。具体的には、exclusive引数で排他的正規化の有効/無効を、with_comments引数でコメントを含めるか否かを設定でき、xpathns_prefixesの引数を使用することで、特定のノードセットのみを対象とした正規化を行うことができます。成功した場合は正規化されたXML文字列を返し、失敗した場合はfalseを返します。

構文(syntax)

1<?php
2$fragment = new DOMDocumentFragment();
3$canonicalizedString = $fragment->C14N();
4?>

引数(parameters)

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

  • bool $exclusive = false: 排他的な正規化を行うかどうかを指定します。true に設定すると、要素の全祖先ノードではなく、指定されたノードのみを正規化します。
  • bool $withComments = false: コメントノードを正規化に含めるかどうかを指定します。
  • ?array $xpath = null: 正規化の対象となるノードをXPath式で指定します。
  • ?array $nsPrefixes = null: 正規化で考慮する名前空間プレフィックスの配列を指定します。

戻り値(return)

string|false

DOMDocumentFragment::c14nメソッドは、XML文書の正規化された文字列表現を返します。正規化に失敗した場合はfalseを返します。

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