- 締切済み
正規表現 URLのリンク
$value = 'http://www.google.co.jp http://www.google.co.jp'; $screen = substr($value, 0, 40); $strVal = preg_replace("/http.?:\/\/([0-9a-zA-Z\-\.!~\/?:;=+,%#_])+/","<a href=\"\\0\" target=\"_blank\">\\0</a>", $screen); echo $strVal; とした場合 <a href='http://www.google.co.jp'>http://www.google.co.jp</a> <a href='http://www.googl'>http://www.googl</a> となってしまうのですが、これを2つ目は切れているので、末尾でヒットした場合にはAタグは付けないようにしたいのですが、できますでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
40文字で区切ってしまうと言う理由が良く解りません。 URLが必ず先頭から始まると解っている場合、以下のような物はいかがでしょうか。 $value = 'http://www.google.co.jp http://www.google.co.jp'; $strVal = preg_replace("/^http.?:\/\/([0-9a-zA-Z\-\.!~\/?&%:;=+,%#_])+/","<a href=\"\\0\" target=\"_blank\">\\0</a>", $value); echo $strVal; URLにはアンパサンドも良く使われると思うので、ついでに入れておいた方が良いと思います。 極稀に日本語ドメインの方がいるかも知れませんし、単純に[^"' ]などでも良いかも知れません。
- glphon
- ベストアンサー率26% (41/152)
一度分割してから部分的に置き換えてはいかがでしょうか。 $value = 'http://www.google.co.jp http://www.google.co.jp'; $vs = split (' ', $value); $vs0 = preg_replace("/http.?:\/\/([0-9a-zA-Z\-\.!~\/?:;=+,%#_])+/","<a href=\"\\0\" target=\"_blank\">\\0</a>", $vs[0]); $vs[0] = $vs0; $strVal = implode ("\n", $vs); echo $strVal;
補足
すみません。解りにくくて(TT $value = 'http://www.google.co.jp http://www.google.co.jp'; はあくまで例でして、$valueには毎回同じ文が入るわけではなく、URLが入っている場合のみリンクするようにしたいのです。 しかし、40文字あたりにリンクがきた時に問題があるなと思って今回質問させてもらいました。
補足
40文字はあくまで例なので、理由はありません。 ありがとうございます&もいりますね。 日本語ドメインは対応しないという事でお願いします。