【PHP8.x】textContentプロパティの使い方
textContentプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
textContentプロパティは、Dom\Elementオブジェクトが持つ、HTMLドキュメント内の要素とそのすべての子孫ノードのテキストコンテンツを保持するプロパティです。このプロパティを使用すると、指定されたHTML要素(例えば、Webページの<p>タグや<div>タグなど)が含む純粋なテキスト情報を取得したり、そのテキスト内容を新しく設定したりできます。
具体的には、あるHTML要素が持つ開始タグから終了タグまでの間に含まれるテキストすべてを、HTMLタグや属性を無視して抽出します。例えば、<p>こんにちは、<b>世界</b>!</p>というHTML構造を持つ要素に対してこのプロパティを取得した場合、「こんにちは、世界!」という文字列が得られます。逆に、このプロパティに新しい文字列を代入することで、その要素内のテキスト内容を簡単に更新することが可能です。
この機能は、Webスクレイピングで特定の情報(ニュース記事の本文や商品の説明文など)からタグを除いたテキストだけを抽出したい場合や、PHPスクリプトで動的にWebページを生成する際に、HTMLタグを含まないプレーンテキストを要素内に安全に挿入したい場合に非常に役立ちます。HTMLタグをそのまま扱ってしまうような他のプロパティと異なり、textContentは純粋なテキストのみを対象とするため、意図しないHTMLの解釈やスクリプトの実行といったセキュリティ上の問題を避ける効果も期待できます。
したがって、PHPを使ってHTMLドキュメントの構造を操作し、要素のテキスト内容を効率的かつ安全に管理するための基本的ながら強力な手段として利用されます。
構文(syntax)
1<?php 2use Dom\Document; 3 4$document = new Document(); 5$element = $document->createElement('p'); 6$element->textContent = '要素のテキストコンテンツを設定します。'; 7echo $element->textContent; // 設定されたテキストコンテンツを取得し、表示します。 8?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
Dom\Element クラスの textContent プロパティは、その要素内に含まれるすべてのテキストコンテンツを結合した文字列を返します。
サンプルコード
PHP DOM: textContentでテキストを取得・置換する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * Dom\ElementのtextContentプロパティの基本的な使い方を示します。 7 * textContentは、要素内のHTMLタグをすべて取り除いたテキストを取得したり、 8 * 要素の内容を新しいテキストで完全に置き換えたりするために使用します。 9 */ 10function demonstrateDomElementTextContent(): void 11{ 12 // 操作対象となるHTML文字列を定義します 13 $html = <<<HTML 14 <!DOCTYPE html> 15 <html> 16 <body> 17 <div id="main-content"> 18 <p>これは最初の段落です。 <strong>重要な</strong> テキストも含まれます。</p> 19 <ul> 20 <li>リスト項目 1</li> 21 <li>リスト項目 2</li> 22 </ul> 23 </div> 24 </body> 25 </html> 26 HTML; 27 28 // DOMDocumentオブジェクトをインスタンス化します 29 $dom = new DOMDocument(); 30 31 // HTML文字列を読み込みます。 32 // HTML5の構文解釈で発生しうる警告を抑制するために@演算子を使用します。 33 @$dom->loadHTML($html); 34 35 // id属性を元に要素を取得します 36 $element = $dom->getElementById('main-content'); 37 38 // 要素が正しく取得できた場合に処理を実行します 39 if ($element) { 40 // --- 1. textContentプロパティでテキストを「取得」する --- 41 // 子要素のタグ(p, strong, ul, li)はすべて無視され、 42 // 内部のテキストだけが連結された文字列として取得されます。 43 echo "--- 取得したtextContent(加工前) ---\n"; 44 echo $element->textContent . "\n\n"; 45 46 echo "--- 取得したtextContent(trimで整形後) ---\n"; 47 echo trim($element->textContent) . "\n\n"; 48 49 // --- 2. textContentプロパティでテキストを「設定」する --- 50 // textContentに文字列を代入すると、その要素のすべての子ノード(pやulタグなど)が削除され、 51 // 指定した文字列を持つ新しいテキストノードに置き換えられます。 52 $element->textContent = 'このテキストに置き換えられました。'; 53 54 echo "--- textContent設定後のHTML ---\n"; 55 // saveHTML()で変更後のHTML全体を出力して確認します。 56 echo $dom->saveHTML(); 57 } 58} 59 60// 作成した関数を実行します 61demonstrateDomElementTextContent();
PHPのDom\Elementクラスが持つtextContentプロパティは、HTML要素が内包するテキストコンテンツを操作するための機能です。このプロパティは引数を取りません。
textContentプロパティを参照(読み取り)すると、その要素の内部に含まれる全ての子孫要素のHTMLタグを取り除き、テキスト部分だけを連結した単一の文字列(string)を戻り値として取得できます。サンプルコードでは、div要素内の<p>タグや<strong>タグなどが無視され、中のテキストだけが抽出されていることが確認できます。このように、HTMLの構造を意識せずに純粋なテキスト情報だけを取り出したい場合に非常に便利です。
一方、このプロパティに新しい文字列を代入(書き込み)すると、その要素の既存の子要素(他のタグやテキスト)は全て削除され、指定した文字列を持つ新しいテキストに完全に置き換えられます。これは、要素の内容を安全に更新する簡単な方法です。サンプルコードでは、div要素の中身が「このテキストに置き換えられました。」というシンプルなテキストに一括で変更されています。
textContentプロパティでテキストを取得すると、HTMLタグはすべて取り除かれます。取得した文字列には、元のHTMLの改行やインデントによる不要な空白が含まれることが多いため、trim()関数などで整形すると意図した結果を得やすくなります。逆にtextContentに値を設定すると、その要素の中身はすべて上書きされます。元々あった子要素はすべて削除され、指定したテキストのみに置き換わるため、HTML構造を意図せず破壊しないよう注意が必要です。また、@演算子はHTMLの解釈で発生する警告を抑制しますが、重要なエラーを見逃す可能性もあるため、開発中は警告内容も確認することをお勧めします。
PHP DOM textContentで要素のテキストを取得・更新する
1<?php 2 3/** 4 * Dom\Element の textContent プロパティの使用例を示します。 5 * HTML文字列から特定の要素を取得し、そのテキスト内容を読み取り、 6 * その後、新しいテキストで内容を更新します。 7 */ 8function demonstrateTextContentProperty(): void 9{ 10 // 操作対象となるHTML文字列を定義します。 11 $htmlString = <<<HTML 12<!DOCTYPE html> 13<html> 14<head> 15 <title>textContent Example</title> 16</head> 17<body> 18 <div id="main-content"> 19 <h1>Welcome!</h1> 20 <p>This is a <strong>sample</strong> paragraph.</p> 21 </div> 22</body> 23</html> 24HTML; 25 26 // DOMDocumentオブジェクトをインスタンス化します。 27 // これはHTMLやXMLを操作するためのものです。 28 $dom = new DOMDocument(); 29 30 // HTML文字列を読み込みます。 31 // @ はHTML5のタグなどに対するパース時の警告を抑制します。 32 @$dom->loadHTML($htmlString); 33 34 // id="main-content" を持つ要素 (Dom\Element) を取得します。 35 $element = $dom->getElementById('main-content'); 36 37 if ($element) { 38 // 1. textContentプロパティでテキストを「取得」します。 39 // 子要素のタグ(<h1>, <p>, <strong>)は無視され、 40 // 含まれるテキストだけが連結された文字列が返されます。 41 echo "--- Original Text Content ---" . PHP_EOL; 42 echo trim($element->textContent) . PHP_EOL; 43 echo PHP_EOL; 44 45 // 2. textContentプロパティに値を代入してテキストを「設定」します。 46 // これにより、要素内のすべての子ノード(h1, pタグなど)が削除され、 47 // 新しいテキストノードに置き換えられます。 48 $element->textContent = 'This content has been updated by PHP.'; 49 50 // 3. 変更が反映されたか確認するため、HTML全体を出力します。 51 echo "--- Updated HTML ---" . PHP_EOL; 52 echo $dom->saveHTML(); 53 } 54} 55 56// 関数を実行します。 57demonstrateTextContentProperty(); 58
PHPのDom\Elementクラスが持つtextContentプロパティは、HTML要素内のテキスト内容を取得したり、設定したりするために使用します。
このプロパティで値を読み取ると、その要素自身と、その中に含まれる全ての子孫要素のテキストが連結された一つの文字列として返されます。このとき、<h1>や<strong>といったHTMLタグはすべて取り除かれ、純粋なテキスト部分だけが抽出されます。サンプルコードでは、div要素内の見出しと段落のテキストを一度に取得しています。戻り値は、このようにして得られた文字列(string)です。
逆に、このプロパティに新しい文字列を代入すると、その要素が元々持っていた子要素(他のタグやテキスト)は全て削除され、代入した文字列が新しいテキストとして設定されます。これにより、要素の内容を簡単かつ完全に書き換えることが可能です。textContentはプロパティのため、メソッドのような引数はありませんが、値を設定する際の文字列が引数のような役割を果たします。
textContentプロパティは、指定した要素とそのすべての子要素からHTMLタグを取り除き、テキスト情報だけを取得します。改行や空白もそのまま連結されるため、trim関数などで整形が必要になる場合があります。最も重要な注意点は、このプロパティに新しいテキストを設定すると、その要素内の子要素がすべて完全に削除され、指定した文字列を持つ一つのテキストノードに置き換えられてしまうことです。HTMLの構造を維持したまま一部のテキストだけを変更したい場合には適していません。