Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【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コンテンツも適切に解析されます。

関連コンテンツ

関連IT用語

関連プログラミング言語