PHPで文字列中のURLをパラメータとしてリンクタグを挿入する方法を教えて下さい。
現在は、以下のような処理を行い、文字列($str)中のURL部分を抜き出し、jump.phpへのパラメータとしてリンクタグを追加しています。
------------------------------------------------------------
$pat_sub = preg_quote( '-._~%:/?#[]@!$&\'()*+,;=', '/' );
$pat = '/((http|https):\/\/[0-9a-z' . $pat_sub . ']+)/i';
$rep = '<a href="jump.php?url=$1">$1</a>';
$result = preg_replace ( $pat, $rep, $str );
------------------------------------------------------------
※$str中に「http://aaa.com/」があった場合、「<a href="jump.php?url=http://aaa.com/">http://aaa.com/</a>」に置換
通常のURLであれば希望通りの結果が得られるのですが、#を含むURLが存在した場合、GETパラメータとして送ると、jump.phpの方で正しく取得できない(#以降が取得できない)ので、urlencodeを通してから渡してやる必要があるのかなと思っています。
上記のような処理で、文字列中から抽出したURLをエンコードした上で、パラメータとしてリンクタグを挿入する方法を教えて下さい。
もちろん、jump.phpでパラメータ全体が取得できるのであれば、エンコード以外の方法でも構いません。
どうぞよろしくお願い致します。
<?php
$str = 'http://aaa.com/';
$pat_sub = preg_quote( '-._~%:/?#[]@!$&\'()*+,;=', '/' );
$pat = '/(https?:\/\/[0-9a-z' . $pat_sub . ']+)/i';
$result = preg_replace_callback($pat, function($matches) {
return '<a href="jump.php?url=' . rawurlencode($matches[0]) . '">' . $matches[0] . '</a>';
}, $str);