WordPressで投稿コンテンツなどを出力するとき、「HTMLタグを無くして文字だけを取得したい」といったことがあるかと思います。もちろんPHPの関数なのでWordPress以外でも利用できます。
そんなテキストだけを出力する必要がある時に使える、PHPの strip_tags()
の使い方メモです。
strip_tags() で文字列に含まれるタグを削除
strip_tags()
関数は、指定した文字列の中にあるHTMLのタグやPHPタグを削除します。
strip_tags($str, $allowed_tags = null)
// タグを取り除いた文字列 = strip_tags(タグを取り除きたい文字列, 出力を許可するタグ(取り除かないタグ))
- 【$str】消したいHTMLタグがある文字列を指定。
- 【$allowed_tags】取り除きたくないHTMLタグを指定。
返り値は、$str
で指定した文字列から$allowed_tags
で指定した以外のHTMLタグを取り除いた文字列です。
文字列に含まれる全てのHTMLタグを削除
全てのHTMLタグを削除するならこのような記述でOK。
$str = '<a href="https://komaricote.com">strip_tags()でHTMLタグ削除</a>';
$deleteHtml = strip_tags($str);
【HTMLの表示】
strip_tags()でHTMLタグ削除
PHPタグやコメント表記も削除される
PHPタグやHTMLコメントがある場合も削除されます。
$str = '<p><?php echo "テスト文字"; ?>テキスト<!-- コメントアウト --></p>';
$deleteStr = strip_tags($str);
【HTMLの表示】
テキスト
特定のHTMLタグのみ削除したい場合
特定のタグのみ除外したい場合は「削除しないHTMLタグ」を指定します。以下のコードの場合はpタグを削除します。
$str = '<p><a href="https://komaricote.com">strip_tags()で特定のHTMLタグ削除</a><p>';
$deletePtag = strip_tags($str, '<a>');
【HTMLの表示】
<a href="https://komaricote.com">strip_tags()で特定のHTMLタグ削除</a>
複数のタグを除外したい場合はタグをつなげて記述するればOK。以下の場合はh3タグのみを削除します。
$str02 = '<h3><p><a href="https://komaricote.com">strip_tags()で特定のHTMLタグ削除</a></p></h3>';
$deleteH3tag = strip_tags($str02, '<p><a>');
【HTMLの表示】
<p><a href="https://komaricote.com">strip_tags()で特定のHTMLタグ削除</a></p>
※HTMLコメントやPHPタグは除外することができません。(削除される)
※HTMLがちゃんと記述されているか、と言ったチェックは行わないため、タグが誤ったものだと削除対象から外れてしまいます。
うまく取り除くことができなかったり必要な部分まで除外されてしまう場合は、元のタグが正しく記述されているか確認してみましょう。
HTMLタグを「除外」ではなく「無効」にしたいと言った場合は、htmlspecialchars()
関数を使います。
こちらの関数は <p></p>
などのHTMLタグの文字列を、<p>
、<p>
といった特殊文字に変換するためのコードです。
WordPressでコンテンツ出力の際にHTMLタグを取り除く
WordPressのテンプレートタグの中には、そのまま出力すると文字列にHTMLが含まれるものもあり、この場合はHTMLタグを削除する記述が必要です。
主にタイトルやコンテンツを出力する際に文字数を制限したいことが多いと思います。しかしget_the_content()
や get_the_title()
はHTMLタグも出力されてしまうので、取り除きたい場合は strip_tags
を使用して出力するようにします。
$strip_cont = strip_tags(get_the_content());
echo $strip_cont;
コンテンツを取得&出力してくれる the_content()
ですが、strip_tags(the_content());
だとタグが除外されませんでした。なので一度 get_the_content()
で取得してから出力する形にします。
タイトルのHTMLタグを除外する場合は the_title_attribute()
というテンプレートタグが便利です。HTMLタグを削除してテキストのみ出力してくれるテンプレートタグです。