【PHP8.x】Dom\HTMLDocument::baseURIプロパティの使い方
baseURIプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
『baseURIプロパティは、HTMLドキュメントの基準となるURIを文字列で保持する読み取り専用のプロパティです。このプロパティが示すURIは、ドキュメント内に記述された相対パスのURL(例えば、画像ファイルのパスやリンク先のパスなど)を絶対パスに解決するための基準点として使用されます。この値は、通常、ドキュメントが読み込まれた元の場所のURIになります。例えば、ファイルからドキュメントを読み込んだ場合はそのファイルのパス、ウェブサーバーから取得した場合はそのURLが該当します。また、HTMLの<base>タグで明示的にベースURIが指定されている場合、その値が考慮された後の最終的なURIがこのプロパティに反映されます。しかし、ドキュメントがメモリ上の文字列から直接生成された場合や、明確な取得元が存在しない場合には、ベースURIを特定できないため、このプロパティは null を返します。このように、baseURIプロパティは、ドキュメント内のリソースへの正確なパスを特定する上で重要な役割を果たします。
構文(syntax)
1<?php 2 3$doc = new \Dom\HTMLDocument(); 4 5$doc->loadHTML('<!DOCTYPE html><html><head><base href="https://www.example.com/path/"></head><body></body></html>'); 6 7$baseURI = $doc->baseURI; 8 9var_dump($baseURI); 10 11?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
?string
このプロパティは、HTMLドキュメントのベースURIを表す文字列を返します。ドキュメントにベースURIが設定されていない場合は、nullを返します。
サンプルコード
PHPでHTMLのbaseURIを取得する
1<?php 2 3/** 4 * HTMLドキュメントのベースURI (baseURI) を取得するサンプルコードです。 5 * 6 * baseURIは、HTMLドキュメント内の相対URLを解決するための基準となるURLです。 7 * 通常、HTMLの <base> タグの href 属性で指定された値、 8 * またはドキュメントがロードされたURL (ファイルパスなど) になります。 9 */ 10function getHtmlDocumentBaseUri(): void 11{ 12 // HTML文字列を定義します。 13 // ここでは、<base> タグを使用して明示的にベースURIを設定しています。 14 $htmlContent = <<<HTML 15<!DOCTYPE html> 16<html> 17<head> 18 <meta charset="utf-8"> 19 <title>Base URI Example</title> 20 <base href="http://example.org/assets/"> 21</head> 22<body> 23 <h1>Welcome</h1> 24 <p>このページは相対パスの基準URLを示す例です。</p> 25 <img src="images/logo.png" alt="サイトロゴ"> <!-- この画像のパスはベースURIから解決されます --> 26</body> 27</html> 28HTML; 29 30 // DOMDocument オブジェクトを作成します。 31 // これは、HTMLドキュメントを解析し、その構造を操作するための標準クラスです。 32 $dom = new DOMDocument(); 33 34 // HTML文字列をDOMDocumentにロードします。 35 // HTML5などの新しい要素で警告が出ることがあるため、@演算子で一時的にエラーを抑制しています。 36 @$dom->loadHTML($htmlContent); 37 38 // baseURI プロパティにアクセスし、ドキュメントのベースURIを取得します。 39 // 上記のHTMLでは <base href="..."> が指定されているため、その値が返されます。 40 $baseUri = $dom->baseURI; 41 42 echo "HTML ドキュメントのベースURI: "; 43 if ($baseUri !== null) { 44 echo $baseUri; 45 } else { 46 echo "ベースURIは設定されていません (null)。"; 47 } 48 echo "\n"; 49} 50 51// 関数を実行して、HTMLドキュメントのベースURIを表示します。 52getHtmlDocumentBaseUri(); 53
このサンプルコードは、PHPのDom\HTMLDocumentクラスが提供するbaseURIプロパティを使用して、HTMLドキュメントの基準となるURLを取得する方法を示しています。baseURIは、HTMLドキュメント内で使用される相対URL(例えば、画像ファイルのパスやリンクのURLなど)が、どのURLを起点として解決されるべきかを定義する重要なプロパティです。通常、この値はHTMLの<base>タグのhref属性で明示的に指定されたURLになるか、指定がない場合はドキュメントがロードされたURL(例えば、ブラウザで開かれたファイルのパスなど)になります。
コードでは、まず<base href="http://example.org/assets/">タグを含むHTML文字列を$htmlContent変数に定義しています。次に、DOMDocumentオブジェクトを作成してこのHTML文字列を解析し、ドキュメントの構造をメモリ上に構築します。その後、$dom->baseURIという形でこのプロパティにアクセスすることで、ドキュメントのベースURIを取得しています。baseURIプロパティは引数を必要としません。戻り値は?string型であり、ベースURIが有効な文字列として取得できる場合はそのURIが返され、ベースURIが特定できないなどの理由で値が存在しない場合にはnullが返される可能性があります。このサンプルでは<base>タグで明確に指定されているため、「http://example.org/assets/」という文字列がベースURIとして取得され、表示されます。
baseURIプロパティは、HTMLドキュメント内の相対URLを解決するための基準URIを示します。HTML内に<base>タグが存在すればそのhref属性値が返され、タグがない場合はドキュメントがロードされたURLが基準となります。このプロパティの戻り値はnullになる可能性があるため、値を利用する際は必ずnullチェックを行い、安全に利用してください。
サンプルコードにおけるDOMDocument::loadHTML()での@演算子によるエラー抑制は、開発時には非推奨です。HTMLの構文エラーやHTML5の新しい要素などで警告が発生しやすいため、エラー内容を確認し、HTMLの修正や適切なエラーハンドリングを心がけましょう。PHP 8ではDom\HTMLDocumentクラスも利用可能ですが、DOMDocumentも引き続きHTMLの解析に活用できます。
PHPでHTMLのベースURIを取得する
1<?php 2 3/** 4 * 指定されたHTMLコンテンツからDom\HTMLDocumentのベースURIを取得する関数。 5 * 6 * Dom\HTMLDocument::baseURI プロパティは、HTMLドキュメント内の相対URLの解決基準となるURIを返します。 7 * このURIは、HTML内の <base> タグの href 属性で明示的に指定されるか、 8 * そうでなければドキュメントがロードされたURI (例: 現在のスクリプトのURI) によって決定されます。 9 * 10 * @param string $htmlContent HTMLコンテンツ文字列。 11 * @return string|null ベースURI文字列、またはURIが特定できない場合はnull。 12 */ 13function getHtmlDocumentBaseURI(string $htmlContent): ?string 14{ 15 // 新しい Dom\HTMLDocument オブジェクトを作成します。 16 // このオブジェクトは、HTMLドキュメントを解析し、DOMツリーとして扱えるようにします。 17 $document = new Dom\HTMLDocument(); 18 19 // 提供されたHTMLコンテンツ文字列をDom\HTMLDocumentオブジェクトにロードします。 20 // これにより、HTMLコンテンツが解析され、オブジェクトの内部構造が構築されます。 21 $document->loadHTML($htmlContent); 22 23 // Dom\HTMLDocument::baseURI プロパティにアクセスし、ドキュメントのベースURIを取得します。 24 // このプロパティは、HTML内に <base> タグが存在し、その href 属性が有効な場合はその値を返します。 25 // <base> タグがない場合、多くのケースでドキュメントがロードされた環境のURI(例えば、このPHPスクリプトの実行URL)が返される可能性があります。 26 // 戻り値は文字列またはnullになるため、型ヒント ?string が適用されています。 27 return $document->baseURI; 28} 29 30// Dom\HTMLDocument::baseURI プロパティの動作を示すためのサンプルHTMLコンテンツ。 31// この例では、<base> タグを使ってベースURIを明示的に指定しています。 32$sampleHtml = <<<HTML 33<!DOCTYPE html> 34<html> 35<head> 36 <meta charset="utf-8"> 37 <title>HTMLベースURIの例</title> 38 <!-- ドキュメント内の相対URL(例: 画像のsrcやリンクのhref)の解決基準となるURIを定義します --> 39 <base href="http://example.org/documents/my-project/"></base> 40</head> 41<body> 42 <h1>HTMLドキュメントのベースURIの取得</h1> 43 <p>このページでは、<base>タグでベースURIが設定されています。</p> 44 <img src="images/logo.png" alt="ロゴ"> <!-- この画像は "http://example.org/documents/my-project/images/logo.png" を参照します --> 45 <a href="about.html">概要ページ</a> <!-- このリンクは "http://example.org/documents/my-project/about.html" を参照します --> 46</body> 47</html> 48HTML; 49 50// 定義した関数を呼び出し、HTMLドキュメントのベースURIを取得します。 51$baseURI = getHtmlDocumentBaseURI($sampleHtml); 52 53// 取得したベースURIの結果を出力します。 54if ($baseURI !== null) { 55 echo "取得されたベースURI: " . $baseURI . "\n"; 56} else { 57 echo "ベースURIは特定できませんでした。\n"; 58} 59
PHP 8のDom\HTMLDocument::baseURIプロパティは、HTMLドキュメント内の「ベースURI」を取得するために使用されます。ベースURIとは、HTMLドキュメント内に記述されている<img src="images/logo.png">や<a href="about.html">のような相対URLを、完全な絶対URL(例: http://example.com/images/logo.png)に変換する際の基準となるURLのことです。
このプロパティが返すベースURIは、まずHTMLドキュメントの<head>セクションに<base href="http://example.org/path/">タグが存在し、そのhref属性が有効な場合にその値が使用されます。もし<base>タグがHTML内に存在しない場合は、そのHTMLドキュメントがロードされた元のURI(例えば、現在のPHPスクリプトが実行されているURL)がベースURIとして扱われることがあります。
提供されたサンプルコードでは、まずDom\HTMLDocumentオブジェクトを新しく作成し、次にloadHTMLメソッドを使って解析したいHTMLコンテンツをこのオブジェクトに読み込みます。HTMLが解析された後、$document->baseURIに直接アクセスするだけで、そのHTMLドキュメントのベースURIを簡単に取得できます。
このプロパティは引数を取りません。戻り値の型は?stringであり、ベースURIが取得できた場合はそのURIが文字列として返されます。しかし、何らかの理由でベースURIを特定できなかった場合にはnullが返されるため、処理の際にはnullチェックを行うことが推奨されます。
このDom\HTMLDocument::baseURIプロパティは、与えられたHTMLコンテンツを解析し、そのドキュメントのベースURIを特定します。HTML内に<base>タグが存在する場合、そのhref属性値が優先的にベースURIとして返されます。もし<base>タグがない場合、通常はHTMLコンテンツがロードされた環境のURI(例えば、このPHPスクリプトが実行されているURLなど)が適用されます。戻り値はnullとなる可能性があるため、取得後には必ず値の有無を確認する処理を加えてください。これはHTMLの解析結果を示すものであり、PHPスクリプトが動作しているサーバーのURLを直接取得する用途とは異なりますので、目的に応じて使い分けが必要です。