-3

重複の可能性:
テキスト内の URL を HTML リンクに置き換える

PHPでプレーンテキストリンクをハイパーテキストリンクに変換するコードを書いています。私は正規表現を使用しています(ほとんど何も知りません)が、いくつかの問題に直面しています:

  1. 式にアイテムを条件付きで含める/除外する方法がわかりません
  2. 式に URL パラメータを含める方法がわかりません
  3. 私は正規表現についてあまり知りません!

これは私が書いたコードです:

function text2link($text) 
{
    $text = preg_replace
    (
        "/(ftp\.|www\.|http:\/\/|https:\/\/|)(.*)(\.)(com|net|co\.uk)/i", 
        "<a href='http://$2$3$4' target='_blank'>$1$2$3$4</a>", 
        $text
    );

    return $text;
}

このコードは、次のハイパーリンクの「スタイル」を変換します。

http://www.google.com
www.google.com
google.com

などですが、リンクは HTTP に強制されます。何を入力しても、式は HTTP を強制します。必要なプロトコルを条件付きで含めることは可能ですか? 例えば:

"<a href='[SOME IF-CONDITION GOES HERE TO DECIDE WHAT PROTOCOL TO USE]$2$3$4' target='_blank'>$1$2$3$4</a>",

この条件は、次のようなものです。

if $1 == "http, else if $1 == "https", else if $1 == "ftp", 

などなど

また、十分な拡張機能を考慮していないことにも気付きました。これは現在、単なるテスト コードです。

編集:私は、200行を必要とする「フールプルーフ」で壊れないソリューションを探しているわけではないことに注意してください。一部の不明瞭なドメインが取得されなくてもかまいません。最も一般的なドメインと URL が検出され、クリック可能なリンクに変換されるようにしたいだけです。

4

1 に答える 1

0

正規表現を微調整する必要はありません:

function text2link($text, $protocol="http://") 
{
    $text = preg_replace
    (
        "/(ftp\.|www\.|http:\/\/|https:\/\/|)(.*)(\.)(com|net|co\.uk)/i", 
        "<a href='$protocol$2$3$4' target='_blank'>$1$2$3$4</a>", 
        $text
    );

    return $text;
}

オプションのプロトコルを 2 番目のパラメーターとして渡すことができます。渡さhttp://ない場合はデフォルトになります。

于 2012-09-12T18:55:29.643 に答える