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

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

作成日: 更新日:

基本的な使い方

『C14Nメソッドは、DocumentTypeノードをW3C勧告の仕様に基づいて正規化(Canonicalize)し、その結果を文字列として取得するために実行するメソッドです。正規化とは、XML文書の論理的な意味を変えることなく、属性の順序や空白の扱いなどを定められたルールに従って統一的な形式に変換する処理を指します。この処理により、例えば電子署名などで文書の同一性を検証する際に、異なる環境で生成されたXML文書でもバイト単位で厳密に比較することが可能になります。このメソッドは、XML文書全体ではなく、<!DOCTYPE ...>で表される文書型定義(DTD)の部分のみを対象とします。引数を通じて、正規化のモードを細かく制御することが可能です。例えば、第一引数の exclusive で排他的正規化を行うか、第二引数の withComments でコメントノードを結果に含めるかを真偽値で指定できます。処理が成功すると正規化されたDTDの文字列が返され、失敗した場合は false が返ります。』

構文(syntax)

1<?php
2
3$dom = new DOMDocument();
4$dom->loadHTML('<!DOCTYPE html><html><body><p>Hello</p></body></html>');
5
6$doctype = $dom->doctype;
7
8if ($doctype instanceof \Dom\DocumentType) {
9    // DocumentTypeノードを正規化された文字列形式に変換します
10    $canonicalString = $doctype->C14N();
11    
12    echo $canonicalString;
13}
14
15?>

引数(parameters)

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

  • bool $exclusive = false: 排他セレクタを使用して正規化するかどうかを決定するブール値。true に設定すると、指定されたXPath式に一致する要素のみが正規化されます。
  • bool $withComments = false: コメントを含めて正規化するかどうかを決定するブール値。
  • ?array $xpath = null: 正規化の対象となる要素を指定するXPath式の配列。null の場合は、ドキュメント全体が対象となります。
  • ?array $nsPrefixes = null: 正規化の際に含める名前空間プレフィックスの配列。null の場合は、使用されているすべての名前空間が考慮されます。

戻り値(return)

string|false

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

関連コンテンツ

関連プログラミング言語