LoginSignup
0
0

More than 1 year has passed since last update.

PHP で テキストのハッシュタグへリンクを貼る

Last updated at Posted at 2023-02-04

 PHPで、テキスト文字列内のハッシュタグ(#から始まる単語)をリンクに変換する関数をChatGPT に聞きながら、作成してみました。その時のメモです。

Q.

php で テキストのハッシュタグに検索リンクを貼るロジックを教えて

A.

<?php
function add_hashtag_links($text) {
    $hashtag_regex = "/#(\w+)/";
    $replace = "<a href='search.php?q=$1'>#$1</a>";
    return preg_replace($hashtag_regex, $replace, $text);
}

$text = "こんにちは #PHP でハッシュタグをリンクに変換しましょう。";
$linked_text = add_hashtag_links($text);
echo $linked_text;

下記のサイトで確認したところ、全角スペースに対応していななたったので、
https://ja.functions-online.com/preg_replace.html

Q.

全角スペースも対応した、ハッシュタグを検索する正規表現を教えて

A.

/#(\S+)/u

結果作成したソースです。

function hashToLink($content)
{
    $hashtag_rege = '/#(\S+)/u';
    $replace = "<a href='/search/?keyword=#$1'>#$1</a>";
    return $result;
}

残念ながら、検索URLに # が入っているため、うまく動作しません。ChatGPT に聞いても、正しく動作するコードが得られないためGoogle 先生に聞いたところ、preg_replace_callback を使えばよいということなので、結局次のようになりました。

function hashToLink($content)
{
    $hashtag_rege = '/#(\S+)/u';
    $result = preg_replace_callback($hashtag_rege, function ($matches) {
        return '<a href="/search/?keyword=' . urlencode($matches[0]) . '">' . $matches[0] . '</a>';
    }, $content);
    return $result;
}

preg_replace_callback まで入力したら、Github Gopilot が 察してくれたようで、自動的に作成してくれました。

 WordPress への適用は、下記のとおり。

add_filter( 'the_content', 'hashToLink', 6); 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0