【PHP8.x】Dom\Document::baseURIプロパティの使い方
baseURIプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
baseURIプロパティは、Dom\Documentオブジェクトに関連付けられたドキュメントのベースURI(Uniform Resource Identifier)を保持するプロパティです。ベースURIは、ドキュメント内の相対URIを絶対URIに解決するために使用されます。
具体的には、HTMLドキュメント内で <img src="image.jpg"> のように相対パスで指定された画像ファイルを参照する場合、image.jpg が指す実際の場所を特定するために、ベースURIが用いられます。ベースURIが http://example.com/path/to/ であれば、上記の画像ファイルの絶対URIは http://example.com/path/to/image.jpg となります。
このプロパティの値は文字列型で、ドキュメントの生成時に設定されるか、または後からスクリプトによって変更されることがあります。もしドキュメントがファイルから読み込まれた場合、通常、ファイルの位置がベースURIとして設定されます。
Dom\DocumentオブジェクトのbaseURIプロパティを参照することで、ドキュメントの相対URI解決の基準となるURIを確認できます。また、DOMDocument::loadHTML()やDOMDocument::loadXML()などのメソッドを使用してドキュメントをロードする際に、オプションとしてベースURIを指定することも可能です。ベースURIが明示的に指定されない場合、ドキュメントがロードされた場所に基づいて自動的に決定されます。
システム開発においては、特に外部リソースを参照するHTMLドキュメントを扱う際に、このプロパティの理解が重要となります。誤ったベースURIが設定されていると、画像やスタイルシートなどのリソースが正しく読み込まれず、意図しない表示結果となる可能性があります。
構文(syntax)
1readonly public string $baseURI;
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
Dom\Document クラスの baseURI プロパティは、このドキュメントの基底 URI を表す文字列を返します。
サンプルコード
PHP Dom\Document の baseURI を取得する
1<?php 2 3// Dom\Document クラスは、HTMLやXMLドキュメントを操作するためのクラスです。 4// baseURI プロパティは、ドキュメントの基準URI(ベースURI)を返します。 5// これは、ドキュメント内の相対URL(例: <a href="page.html">)を解決する際の基準となります。 6 7// 新しい Dom\Document オブジェクトを作成します。 8$document = new Dom\Document(); 9 10// HTML文字列をロードします。 11// ここでは、HTMLドキュメント内で <base> タグを使って基準URIを明示的に指定しています。 12$htmlContent = <<<HTML 13<!DOCTYPE html> 14<html> 15<head> 16 <meta charset="utf-8"> 17 <title>BaseURI Sample</title> 18 <base href="http://www.example.com/products/category/"> 19</head> 20<body> 21 <h1>Welcome</h1> 22 <p>This is a sample document.</p> 23 <a href="item123.html">Item 123</a> <!-- このリンクは baseURI を基準に解決されます --> 24</body> 25</html> 26HTML; 27 28// HTML文字列を Dom\Document オブジェクトにロードします。 29// ロード時には、HTMLドキュメント内の <base> タグが解析され、baseURI が設定されます。 30$document->loadHTML($htmlContent); 31 32// baseURI プロパティにアクセスして、ドキュメントの基準URIを取得します。 33$baseURI = $document->baseURI; 34 35// 取得したベースURIを出力します。 36echo "ドキュメントのベースURI: " . $baseURI . PHP_EOL; 37
PHPのDom\Documentクラスは、HTMLやXMLドキュメントをプログラムで操作するための機能を提供します。このクラスに備わるbaseURIプロパティは、現在処理しているドキュメントの基準URI(ベースURI)を取得するために使用されます。
ドキュメントの基準URIとは、ドキュメント内で定義されている相対URL(例えば、<a href="page.html">のような記述)を、完全な絶対URLに解決する際の基準となるURIのことです。このbaseURIプロパティは引数を一切取らず、ドキュメントに設定されている基準URIを文字列型として返します。
サンプルコードでは、Dom\Documentオブジェクトを作成し、HTMLコンテンツをロードしています。このHTMLには、<head>セクション内に<base href="http://www.example.com/products/category/">という<base>タグが明示的に記述されています。Dom\Document::loadHTML()メソッドでHTMLを読み込む際に、この<base>タグが解析され、そのhref属性の値がドキュメントの基準URIとして自動的に設定されます。
その後、$document->baseURIという形でプロパティにアクセスすることで、設定された基準URIを簡単に取得し、出力しています。この機能は、特に相対パスで記述されたリソースの完全なURLを特定する必要がある場合に役立ちます。
Dom\Document::baseURIプロパティは、HTMLやXMLドキュメント内の相対URL(例:href="item.html")を解決する際の基準となるURIを返します。この値は、ドキュメント内に<base href="...">タグが存在する場合、そのhref属性値が優先的に設定されます。
もし<base>タグがない場合、ドキュメントをloadHTMLFile()でファイルからロードした際にはそのファイルのパスが、loadHTML()で文字列からロードした際には現在のスクリプトのURIや空文字列が設定されるなど、状況によって異なるため注意が必要です。意図しないベースURIになることを避けるため、必要な場合はロードするHTMLドキュメント内で<base>タグを明示的に指定するか、ドキュメントのロード方法を考慮してください。このプロパティはドキュメントの情報を取得するものであり、値を設定することはできません。
PHP: Dom\Document::baseURI でベースURLを取得する
1<?php 2 3/** 4 * HTMLコンテンツからDom\Document::baseURIを取得します。 5 * 6 * Dom\Document::baseURI プロパティは、ドキュメント内の相対URL(例: img要素のsrc属性、a要素のhref属性など)を 7 * 解決するための基準URIを返します。 8 * 9 * - HTML内に <base> タグが存在する場合、その値が baseURI プロパティに設定されます。 10 * - <base> タグがなく、ドキュメントがファイルやURLからロードされていない(HTML文字列を直接ロードした)場合は、 11 * 通常、空文字列が返されます。 12 * 13 * @param string $htmlContent 読み込むHTMLコンテンツ 14 * @return string ドキュメントのベースURI 15 */ 16function getDomDocumentBaseUri(string $htmlContent): string 17{ 18 // Dom\Document クラスの新しいインスタンスを作成します。 19 // このクラスはHTMLやXMLドキュメントをパースして操作するための機能を提供します。 20 $dom = new Dom\Document(); 21 22 // 提供されたHTMLコンテンツをDOMドキュメントにロードします。 23 // これにより、HTML文字列が解析され、DOMツリーが構築されます。 24 // PHP 8では内部的にHTML5をサポートしています。 25 $dom->loadHTML($htmlContent); 26 27 // Dom\Document::baseURI プロパティにアクセスし、その値を返します。 28 // このプロパティは読み取り専用です。 29 return $dom->baseURI; 30} 31 32// === サンプルコードの実行 === 33 34// 1. <base> タグでベースURIが明示的に指定されているHTMLの例 35// この場合、baseURI は <base href="..."> で指定された値になります。 36$htmlWithBaseTag = <<<'HTML' 37<!DOCTYPE html> 38<html> 39<head> 40 <meta charset="utf-8"> 41 <title>記事ページ</title> 42 <base href="http://example.com/blog/articles/"/> 43</head> 44<body> 45 <h1>最新記事</h1> 46 <p>このページでは最新の記事について紹介しています。</p> 47 <img src="images/header.png" alt="ヘッダー画像"> 48 <a href="../category/tech.html">技術カテゴリ</a> 49</body> 50</html> 51HTML; 52 53echo "--- <base> タグがある場合の例 ---\n"; 54$baseUriWithBaseTag = getDomDocumentBaseUri($htmlWithBaseTag); 55echo "DOM ドキュメントのベースURI: " . $baseUriWithBaseTag . PHP_EOL; 56echo "(相対URL 'images/header.png' は 'http://example.com/blog/articles/images/header.png' と解決されます)" . PHP_EOL; 57echo "(相対URL '../category/tech.html' は 'http://example.com/blog/category/tech.html' と解決されます)" . PHP_EOL . PHP_EOL; 58 59// 2. <base> タグがなく、HTML文字列を直接ロードした場合の例 60// Dom\Document::loadHTML() で文字列をロードする場合、baseURI は通常空文字列になります。 61// これは、ドキュメントのロード元URIが不明なためです。 62$htmlWithoutBaseTag = <<<'HTML' 63<!DOCTYPE html> 64<html> 65<head> 66 <meta charset="utf-8"> 67 <title>シンプルページ</title> 68</head> 69<body> 70 <p>このページにはベースURIが明示されていません。</p> 71 <a href="product/item1.html">商品1へ</a> 72</body> 73</html> 74HTML; 75 76echo "--- <base> タグがない場合の例 ---\n"; 77$baseUriWithoutBaseTag = getDomDocumentBaseUri($htmlWithoutBaseTag); 78echo "DOM ドキュメントのベースURI: " . (empty($baseUriWithoutBaseTag) ? "(空文字列)" : $baseUriWithoutBaseTag) . PHP_EOL; 79echo "(相対URL 'product/item1.html' の解決には、このDOMドキュメント以外の外部の基準URIが必要になります)" . PHP_EOL;
PHPのDom\Document::baseURIプロパティは、HTMLドキュメント内の相対URL(例: <img>や<a>タグのパス)を絶対URLに解決するための基準URIを返します。
サンプルコードのgetDomDocumentBaseUri関数は、引数$htmlContentで与えられたHTMLコンテンツをDom\Documentオブジェクトにロードし、そのbaseURIプロパティの値を文字列として取得します。
このプロパティの値は、ドキュメント内に<base href="...">タグが存在すればそのhref属性の値が設定されます。<base>タグがない、またはHTMLコンテンツがファイルパスを持たない文字列としてDom\Document::loadHTML()でロードされた場合、baseURIは通常、空文字列を返します。この際、相対URLの解決には外部の基準情報が必要となります。baseURIプロパティは読み取り専用です。
Dom\Document::baseURIプロパティは、HTMLドキュメント内の相対URL(例: <img>や<a>のパス)を解決するための基準URIを返します。サンプルコードのようにloadHTML()でHTML文字列を直接読み込む場合、HTML内に<base>タグがないとbaseURIは空文字列を返します。このとき、相対URLを正しく解決するには、このDOMドキュメント以外の外部の基準URIを考慮する必要があるため注意が必要です。もしHTMLがファイルやURLからロードされた場合は、そのロード元のパスやURLがbaseURIとして自動的に設定されます。baseURIはドキュメントの基準URIを確認する目的で利用する読み取り専用のプロパティです。PHP 8ではHTML5コンテンツも適切に解析されます。