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でパラメータ全体が取得できるのであれば、エンコード以外の方法でも構いません。
どうぞよろしくお願い致します。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2012/07/06 23:22:40
  • 終了:2012/07/07 00:50:35

ベストアンサー

id:Cherenkov No.1

Cherenkov回答回数1502ベストアンサー獲得回数4922012/07/06 23:46:46

ポイント100pt
<?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);
id:dy7

早速の回答ありがとうございました。教えていただいた方法で上手くいきました!
(はじめ、PHPのバージョンが古かったので無名関数が使えなかったのですが、5.3以降の環境では上手くいきました。)

ありがとうございました。

2012/07/07 00:50:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません