人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: dy7
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Cherenkov
●100ポイント ベストアンサー
<?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);

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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ