PHPでURLをリンクに変換する [auto_link() / url2link()]
今回はLaravelでの使い方ですが、生のPHPでも修正すれば動作可能です。
使い方
trim()で全角英数字スペースを半角に変換してtrim(PHP標準)を行います。
次にhtml()でエスケープ、半角スペース、タブ、改行コードの処理を行い、最後にURLをaタグの<a href="url">url</a>に変換してHTMLにします。
// コントローラー側
$body = "プチモンテ\r\nhttps://www.petitmonte.com/"
$body = Controller::trim($body);
$raw_html = Controller::html($body);
// ビュー側
{!! $raw_html !!}
ソースコード
Laravelの場合はControllerクラスの静的メソッドとして使用します。
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
// 全角 => 半角変換 + trim
public static function trim($str){
if (isset($str)){
// a 全角英数字を半角へ
// s 全角スペースを半角へ
return trim(mb_convert_kana($str, 'as'));
}else{
return "";
}
}
// URLをリンクに変換する(簡易的)
public static function auto_link($text){
$result = $text;
if(isset($result)){
// URLパターン(予約文字 + 非予約文字 + %)
//
// <参考>
// https://www.asahi-net.or.jp/~ax2s-kmtn/ref/uric.html
// https://www.petitmonte.com/php/regular_expression_matome.html
//
// 次のvalidateUrl()も参考になる ※先頭の^ と末尾の$を削除して使用する
// laravel\framework\src\Illuminate\Validation\Concerns/ValidatesAttributes.php
$pattern ='/(http|https):\/\/[!#$%&\'()*+,\/:;=?@\[\]0-9A-Za-z-._~]+/';
// URLをaタグに変換する
$result = preg_replace_callback($pattern, function ($matches) {
return '<a href="' . $matches[0] . '">'. $matches[0] . '</a>';
}, $result);
}
return $result;
}
// 文字列をHTML(RAW)に変換する
public static function html($text){
$result = "";
if(isset($text)){
// エスケープ
$result = htmlspecialchars($text);
// 半角スペース
$result = str_replace(" ", ' ', $result);
// タブ
$result = str_replace(" ", ' ', $result);
// 改行
$result = str_replace("\r\n", '<br>', $result);
$result = str_replace("\r", '<br>', $result);
$result = str_replace("\n", '<br>', $result);
// URLをaタグに変換する
// ※既知の問題点 ---> 最初から<a href=""></a>のタグがある場合はその自動リンクが不自然となる
$result = Controller::auto_link($result);
}
return $result;
}
}
スポンサーリンク
関連記事
公開日:2020年11月16日
記事NO:02847
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









