2012-03-10 5 views
3

可能性の重複:
How to add anchor tag to a URL from text input
PHP Regular expression to match keyword outside HTML tag <a>PHP .....時々....:P

さてさて、私は使用していますOsTicket(電子メールのチケットシステム)を使用し、HTML形式の電子メールを使用するように変換しました。それはハッキングされていますが、機能します。

まあ、現時点では「clickableURLS」と呼ばれるそこでの機能があります....

function clickableurls($text) { 

     //Not perfect but it works - please help improve it. 
     $text=preg_replace('/([^(\'|")]((f|ht){1}tp(s?):\/\/)[[email protected]:%_\+.~#?&;\/\/=]+[^(\'|")])/','<a href="\\1" target="_blank">\\1</a>', $text); 
     $text=preg_replace("/(^|[ \\n\\r\\t])([^('|\")]www\.([a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+)(\/[^\/ \\n\\r]*)*[^('|\")])/", 
       '\\1<a href="http://\\2" target="_blank">\\2</a>', $text); 
     $text=preg_replace("/(^|[ \\n\\r\\t])([^('|\")][_\.0-9a-z-][email protected]([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}[^('|\")])/",'\\1<a href="mailto:\\2" target="_blank">\\2</a>', $text); 


     return $text; 
    } 

あなたが見ることができるように、それは基本的に(HTTPまたはHTTPSまたはWWWを検索)URLを取り、そこに適切なジャンボを追加します。 WELL

....

リンク正しい方法...自動的にコードが作成されます作成するために、私たちの最寄の一つはWYSIWYGをusees場合ので、私は今、WYSIWYGが....設定している

。 ... clickableurls関数は、既にテキストにあるHTTPを見つけて、それを再び変換します。

私は基本的にそれを処理する最良の方法を理解しようとしています。私は両方のオプションが欲しいです..そしておそらくIF文をやっていると思っていましたが、preg_replaceを変更しても意味がありませんか?

どのような考えですか?再度おかげでコミュニティオーバーフロー!

+0

あなた正規表現に問題があります。特定の詳細を知らずに、あなたを助けることは困難です。 – sln

+0

「URLをリンクする」を検索します - 多くの回答があります! ([ここで私が使用しているもの](http://stackoverflow.com/a/5291451/433790))。 – ridgerunner

答えて

3

私はあなたが最初のpreg_replace()正規表現にあるものを翻訳するのを手伝ってくれます。
私はあなたの意図を知らないので、できることは最高です。私はいくつかの意図を外挿しました、
しかしそれを決定するまでです。

正規表現が複雑な場合、ブロックの書式設定は複雑さを簡単に確認するのに役立ちます。

([^(\'|")]((f|ht){1}tp(s?):\/\/)[[email protected]:%_\+.~#?&;\/\/=]+[^(\'|")])

(         # Capture group 1 
    [^'"]        # Consume a character that is not single nor double quote 
    (         # Capture group 2 
     (?:ftp|https?):      # Either ftp, OR http (optional s) string literal 
     //         # Literl double forward shashes 
    )         # End capt grp 2 
    [[email protected]:%_+.~#?&;/=]+   # 1 or more (greedy) of the characters in this class 
    [^'"]        # Consume a character that is not single nor double quote 
)         # End capt grp 1