2012-01-23 7 views
1

以下のコードは、テキストの本文内のURLを検出し、タグでラップします。PHP regexフィルタに条件付きクラスを追加する方法

function link_it($text) 
    { 

     $text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" >$3</a>", $text); 
     $text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp|m)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" >$3</a>", $text); 
     $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:[email protected]$3\">[email protected]$3</a>", $text); 
     return($text); 
    } 

の特定のドメインを持つ場合、ユーザーがタイプ(上記の機能によって検出された)URLように私はそれをしたいと思い関数はタグテンプレートにクラス」埋め込みを追加するなど(のflickr | Vimeoの|ユーチューブ) 、それ以外の場合は、クラスレスにそれを残し

例えば

'これはウェブサイトwww.google.comである' を返します:。

this is the website <a href="http://www.google.com">http://www.google.com</a> 

けどw 'は、このウェブサイトwww.flickr.comは' ould return

this is the website <a href="http://www.flickr.com" class="embed">http://www.flickr.com</a> 

これを関数に追加する方法を教えてください。

答えて

1

これにはpreg_replace_callback()を使用してください。コールバック関数では、URLをembedクラスを持つURLの一部と照合し、一致する場合はclass属性の定義を含めるか、そうでない場合は含めないでください。

+0

美しく動作します!ありがとうございました。 parse_urlと組み合わせると、すてきで上品な解決策になります。偉大な答えと私はその機能を認識していないことが少し恥ずかしい! – gordyr

+0

問題ありません。お役に立てて嬉しいです。 – FtDRbwLXw6

関連する問題