こんにちはフロントエンドエンジニアのまさにょんです!
今回は、APIやDBからHTML情報などを取得するような時に、その取得したHTMLタグ情報から属性の値を取得する方法について解説します。
目次
HTMLタグの属性の値をPHP内で取得する方法
最近、Webサイト制作で使ったConcrete5と言うCMSでの機能実装にあたって、DBから取得したHTMLタグ情報から属性に紐づく属性値を取得する必要がありました。
すなわち「 属性名=”属性値” 」とある時の「 “属性値” 」の部分が欲しいと言うことです。
今回の実装では imgタグの src属性の値がほしかったので、src=”value” の 「 “value” 」を取得する処理を作ったと言うことです。
その際に、使ったPHPの処理ロジックを記録がてら残しておきます。
今回は、次の3つのPHPのメソッドを使って、HTMLタグから属性情報を取得しました。
- explode: 文字列を文字列により分割する
- preg_grep: パターンにマッチする配列の要素を返す
- str_replace: 検索文字列に一致したすべての文字列を置換する
SampleCode全文 & sample.php 実行イメージ
まずは、SampleCode全文と今回のSampleの実行イメージです。
VSCodeの「PHP-Server」と言う拡張機能を使用すると、簡単にPHPファイルを実行できるのでおすすめです。
今回は、imgタグの src属性と aタグの href属性を取得してみます。
<h1>[ PHP でタグの属性の値を取得する方法 href属性や src属性の値を取得して、他のTag の属性値に再利用する ]</h1>
<h2>explode, preg_grep, str_replace を活用します🔥</h2>
<?php
// APIなどでDBからタグ情報などを取得していると想定する。
$a_tag = '<a href="https://masanyon.com/" target="_blank" >記事はこちら!</a>';
$img_tag = '<img src="https://masanyon.com/wp-content/uploads/2022/08/6d4f415fd1a8072759496b22c610ae7d-scaled.jpg" alt="ロボ玉" width="550" height="400">';
// 1. explode で「半角スペース」を境に分割する!
$a_split_result = explode(" ", $a_tag);
var_export($a_split_result);
echo "\n";
?> <br><br> <?php
// array (
// 0 => '<a',
// 1 => 'href="https://masanyon.com/"',
// 2 => 'target="_blank"',
// 3 => '>記事はこちら!</a>',
// )
$img_split_result = explode(" ", $img_tag);
var_export($img_split_result);
echo "\n";
?> <br><br> <?php
// array (
// 0 => '<img',
// 1 => 'src="https://masanyon.com/wp-content/uploads/2022/08/6d4f415fd1a8072759496b22c610ae7d-scaled.jpg"',
// 2 => 'alt="ロボ玉"',
// 3 => 'width="550"',
// 4 => 'height="400">',
// )
// 2. preg_grep で抽出する属性を検索する
$href = preg_grep('/href=/', $a_split_result);
var_export($href);
echo "\n";
?> <br><br> <?php
// array (
// 1 => 'href="https://masanyon.com/"',
// )
// 文字列が文字列で包まれていることに注意!
$src = preg_grep('/src=/', $img_split_result);
var_export($src);
echo "\n";
?> <br><br> <?php
// array (
// 1 => 'src="https://masanyon.com/wp-content/uploads/2022/08/6d4f415fd1a8072759496b22c610ae7d-scaled.jpg"',
// )
// 文字列が文字列で包まれていることに注意!
// 3. str_replace で文字列中の指定した文字を削除
foreach ($href as $value) {
$val = str_replace('href=', '', $value);
var_export($val);
// '"https://masanyon.com/"'
echo "\n";
?> <br><br> <?php
?>
<div>
<h3>No Change No Life I/O🔥</h3>
<!-- 文字列が文字列で包まれているので、href属性に対するPHPタグをクオーテーションで囲まなくてOK! -->
<a href=<?php echo $val; ?> target="_blank" >記事はこちら!</a>
</div>
<?php
}
foreach ($src as $value) {
$val = str_replace('src=', '', $value);
var_export($val);
// '"https://masanyon.com/wp-content/uploads/2022/08/6d4f415fd1a8072759496b22c610ae7d-scaled.jpg"'
echo "\n";
?> <br><br> <?php
?>
<div>
<!-- 文字列が文字列で包まれているので、src属性に対するPHPタグをクオーテーションで囲まなくてOK! -->
<img src=<?php echo $val; ?> alt="ロボ玉" width="550" height="400">
</div>
<div>
<small>©️ 2022 神聖グンマー帝国 ロボ玉教団🔥</small>
</div>
<?php
}
explode でタグの空白を境に分割する
まずは、explode() でHTMLタグを「半角スペース」を境に分割していきます。
<?php
// APIなどでDBからタグ情報などを取得していると想定する。
$a_tag = '<a href="https://masanyon.com/" target="_blank" >記事はこちら!</a>';
$img_tag = '<img src="https://masanyon.com/wp-content/uploads/2022/08/6d4f415fd1a8072759496b22c610ae7d-scaled.jpg" alt="ロボ玉" width="550" height="400">';
// 1. explode で「半角スペース」を境に分割する!
$a_split_result = explode(" ", $a_tag);
var_export($a_split_result);
echo "\n";
?> <br><br> <?php
// array (
// 0 => '<a',
// 1 => 'href="https://masanyon.com/"',
// 2 => 'target="_blank"',
// 3 => '>記事はこちら!</a>',
// )
$img_split_result = explode(" ", $img_tag);
var_export($img_split_result);
echo "\n";
?> <br><br> <?php
// array (
// 0 => '<img',
// 1 => 'src="https://masanyon.com/wp-content/uploads/2022/08/6d4f415fd1a8072759496b22c610ae7d-scaled.jpg"',
// 2 => 'alt="ロボ玉"',
// 3 => 'width="550"',
// 4 => 'height="400">',
// )
preg_grep で抽出する属性を検索する
次にpreg_grep() を使って、抽出する属性を検索します。
<?php
// ・・・省略・・・
// 2. preg_grep で抽出する属性を検索する
$href = preg_grep('/href=/', $a_split_result);
var_export($href);
echo "\n";
?> <br><br> <?php
// array (
// 1 => 'href="https://masanyon.com/"',
// )
// 文字列が文字列で包まれていることに注意!
$src = preg_grep('/src=/', $img_split_result);
var_export($src);
echo "\n";
?> <br><br> <?php
// array (
// 1 => 'src="https://masanyon.com/wp-content/uploads/2022/08/6d4f415fd1a8072759496b22c610ae7d-scaled.jpg"',
// )
// 文字列が文字列で包まれていることに注意!
str_replace で文字列中の指定した文字を削除
最後に str_replace() を使って、文字列中の指定した文字を削除します。
今回は「 属性名=”属性値” 」の「 “属性値” 」の部分が欲しいので「 属性名= 」の部分を削っていきます。
<?php
// ・・・省略・・・
// 3. str_replace で文字列中の指定した文字を削除
foreach ($href as $value) {
$val = str_replace('href=', '', $value);
var_export($val);
// '"https://masanyon.com/"'
echo "\n";
?> <br><br> <?php
?>
<div>
<h3>No Change No Life I/O🔥</h3>
<!-- 文字列が文字列で包まれているので、href属性に対するPHPタグをクオーテーションで囲まなくてOK! -->
<a href=<?php echo $val; ?> target="_blank" >記事はこちら!</a>
</div>
<?php
}
foreach ($src as $value) {
$val = str_replace('src=', '', $value);
var_export($val);
// '"https://masanyon.com/wp-content/uploads/2022/08/6d4f415fd1a8072759496b22c610ae7d-scaled.jpg"'
echo "\n";
?> <br><br> <?php
?>
<div>
<!-- 文字列が文字列で包まれているので、src属性に対するPHPタグをクオーテーションで囲まなくてOK! -->
<img src=<?php echo $val; ?> alt="ロボ玉" width="550" height="400">
</div>
<div>
<small>©️ 2022 神聖グンマー帝国 ロボ玉教団🔥</small>
</div>
<?php
}
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!