2012-04-28 5 views
0

私はbbcodeのような文字列を受け取り、それをhtmlリンクに変換する正規表現を持っています。それは正常に動作します。しかし、私はそれがhttp://extsite.com/category/keyword/のような絶対(外部)URLを厳密に使用するか、内部URLの一部をcategory/keyword/のように使用するかを決めるリンク(内部/外部)のタイプを検出して、あらかじめ定義されたURLpregを使用してURLを書式置換する

preg_replace('/\[([^\]]+)\]\[([^\]"]+)\]/i', '<a href="$2">$1</a>', $text) 

任意の提案は非常に理解されるであろう次のよう$url . category/keyword/

正規表現です。

+1

内部リンクはどのように定義しますか? 'http://'で始まらないリンクですか? – Aziz

+0

はいこれはうまくいくかもしれません – medk

答えて

1

あなたのコメントに基づいて、http://(または類似のプロトコル、たとえばftp://など)で始まるリンクは絶対的なリンクであると見なします。他のリンクは相対リンクとみなされます($ URLが前に付いています)

// replace absolute links 
$text = preg replace ('/\[([^\]]+)\]\[([A-Za-z]+:\/\/[^\]"]+)\]/i', 
         '<a href="$2">$1</a>', $text) 


// replace all remaining (relative) links 
// $url must have a tailing slash '/' 
$text = preg replace ('/\[([^\]]+)\]\[([^\]"]+)\]/i', 
         '<a href="'.$url.'$2">$1</a>', $text) 
+0

ok私はすでにhttpsでやっていますか? [A-Za-z] +ではなく、httpとhttps以外のプロトコルをサポートしていないので、あなたのサンプルは良く見えます。ありがとう。 – medk

+0

'//'相対的なプロトコルはどうですか?それでも外部リンク '// google.com'は有効な外部URLです。 –

+0

@ Truth:正規表現はそのように変更できます。私が言ったように、それは "外部"と "内部"のリンクの定義に依存します – Aziz

関連する問題