【PHP】HTMLタグの属性の値をPHP内で取得する方法

php-attribute

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、APIやDBからHTML情報などを取得するような時に、その取得したHTMLタグ情報から属性の値を取得する方法について解説します。

HTMLタグの属性の値をPHP内で取得する方法

最近、Webサイト制作で使ったConcrete5と言うCMSでの機能実装にあたって、DBから取得したHTMLタグ情報から属性に紐づく属性値を取得する必要がありました。

すなわち「 属性名=”属性値” 」とある時の「 “属性値” 」の部分が欲しいと言うことです。

今回の実装では imgタグの src属性の値がほしかったので、src=”value” の 「 “value” 」を取得する処理を作ったと言うことです。

その際に、使ったPHPの処理ロジックを記録がてら残しておきます。

今回は、次の3つのPHPのメソッドを使って、HTMLタグから属性情報を取得しました。

  1. explode: 文字列を文字列により分割する
  2. preg_grep: パターンにマッチする配列の要素を返す
  3. str_replace: 検索文字列に一致したすべての文字列を置換する

SampleCode全文 & sample.php 実行イメージ

まずは、SampleCode全文と今回のSampleの実行イメージです。

VSCodeの「PHP-Server」と言う拡張機能を使用すると、簡単にPHPファイルを実行できるのでおすすめです。

今回は、imgタグの src属性と aタグの href属性を取得してみます。

【 sample.php 実行イメージ 】

<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!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

PHP / Laravel書籍

参考・引用

  1. PHP-Manual: explode
  2. PHP-Manual: preg_grep
  3. PHP-Manual: str_replace

最近の投稿