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);