テキスト内のURLのみリンク化する。

安藤(プログラマー)
演劇もやっていまする。

続いての投稿になりますが、これが自作php掲示板シリーズの最後になるのかなと思います!
実はすでにフレームワークのLaravelでの掲示板作りも完成してしまっているんですよね。笑
なので、次からはLaravelでの掲示板作りをブログにしていこうかなと(^^)

自作phpシリーズの最後の機能として、投稿されたコメント内のURLのみをリンク化して、表示させるという機能を組み込むことにしました。

いろんなサイトで、何気なくいつもお世話になっているこの機能ですが、実際やろうと思うと何から手を付ければいいのか・・・。
そこで社長より頂いたヒントがこれ、preg_replace_callbackです!

これね!これ!

http://php.net/manual/ja/function.preg-replace-callback.php

これを使うと、なんとも簡単に出来ちゃうんですな。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

$comment = 'いつも使っているWEB検索サイトですか? https://www.geegle.co.jp/ ですかね〜。';

function getLink($comment)
{
    //URL抽出の正規表現
    $pattern = '/https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+/';

    //該当する文字列に処理
    $comment = preg_replace_callback($pattern,'replace',htmlspecialchars($comment));

    return $comment;
}

function replace($matches)
{
    return '<a href="'.$matches[0].'">'.$matches[0].'</a>';
}

echo $comment;

これだけ!
すると$commentは・・・

いつも使っているWEB検索サイトですか? https://www.geegle.co.jp/ ですかね〜。

となるわけですね!
無事にリンクになっているんですね〜。

ただ、正規表現の箇所が難しくて、いまだにベストな正規表現がわからない・・・。
上記の例だと不十分で、コメントに先に<a>タグが入れられていた場合、上手く処理ができないんですよね(*_*)
いい正規表現を見つけたい。。

まだまだ勉強していかねばなりません。

さてさて、最後はあっさりな内容でしたが、これにて自作php掲示板シリーズはおしまいになります!!
次はLaravel製掲示板シリーズですねw

引き続き、よろしくお願いしますー!!