0

私はこの正規表現を使用しています:

$string = preg_replace("~(?!(?:https?://(?:www\.)?|www\.)(?:youtube\.com))(?:https?://(?:www\.)?|www\.)[\w./=?#-%:-]+~i",
                       '<a target="_blank" href="$0">$0</a>', $string);

しかし、ここにリンクをクリック可能なテキストとして表示することはできません:

http://2.bp.blogspot.com/_mGMUxSe_j0I/R24t5bmY2nI/AAAAAAAAAs4/ndqvaJ1Z-oY/s400/chernobyl+-+multiple+sclerosis.jpg

+-+までリンクを作成するだけで、そこで停止してクリック可能になります。再びプレーンテキストになります。

http://chornobyl.in.ua/wp-content/uploads/photo-wolf-640×250.jpg

これは、リンクの640以降のものを表示しません (したがって、x を取得しません)。

+またはxを追加すると[\w./=?#-%:-]リンクがラップされているタグ全体が取得</p>されます。正直なところ、何をすべきかわかりません。誰かが私を助けることができますか?

4

1 に答える 1

1
function superLinks($text)
{
    $ret = ' ' . $text;

    // http:// & https://
    $ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
    // www & ftp
    $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
    // mail
    $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
    // youtube
    $ret = preg_replace("#(^|[\n ])((youtube)\.[^ \"\n\r\t<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);

    $ret = substr($ret, 1);

    return $ret;
}

編集: PHP を使用してプレーン テキストの URL をアクティブなリンクに変換するより良い解決策

于 2013-07-25T18:52:47.240 に答える