0

メッセージ システムを作成しましたが、新しいメッセージが投稿された場​​合に、メッセージ内の URL リンクをクリック可能な HTML リンクに自動変換したいと考えています。この単純な関数を作成しましたが、正常に機能しません。

    // LINK ALL URLS
  $message = ereg_replace("http://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\" target=\"_blank\">\\0</a>", $message);
  $message = ereg_replace("(^| |\n)(www([.]?[a-zA-Z0-9_/-])*)", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $message);

一部の URL では機能していますが、他の URL では問題があり、結果は次のようになります。

<a href="http://www.example.com/index.php">http://www.example.com/index.php</a>?mode=index&page=1

また

<a href="http://www.youtube.com/watch">http://www.youtube.com/watch</a>?v=jSh5Y7jq9FQ

ご覧のとおり、クエスチョンマークの後ろの部分も含めて正しく変換されていません。誰かが上記の私のコードを修正/更新してもらえますか? ところで、 *ereg_replace* を使用する代わりに、おそらく別の (そしてより良い!) 解決策があるでしょうか?

4

3 に答える 3

2
 $message = preg_replace('#((?:[a-zA-Z]+://|www)[^ ]+)#i', '<a href="$0">$0</a>', $message);

これはあなたを助けるかもしれません

于 2013-06-17T12:58:16.387 に答える
2

これは私が現在使用しているソリューションであり、疑問符の修正と ereg_replace() を preg_replace() に変換するためのコメントの提案を含め、正しく機能しているようです。

// LINK ALL URLS
      $message = preg_replace("#http://([.]?[a-zA-Z0-9_/-?])*#", "<a href=\"\\0\" target=\"_blank\">\\0</a>", $message);
      $message = preg_replace("#(^| |\n)(www([.]?[a-zA-Z0-9_/-?])*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $message);
于 2013-06-17T13:31:16.123 に答える