Найти ссылки на странице и запустить его через пользовательскую функцию - PullRequest
1 голос
/ 03 октября 2011
function link_it($text)
{
    $text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" target=\"_blank\">$3</a>", $text);  
    $text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" target=\"_blank\">$3</a>", $text);  
    $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:$2@$3\" target=\"_blank\">$2@$3</a>", $text);  
    return($text);  
}

Это рабочий код.

Я работаю над новой функцией

function shorturl2full($url)
{
    echo 'URL IS: ' . $url;
    return "FULLLINK";
}

Идея состоит в том, чтобы взять URL и вернуть его обратно.Позже собираюсь поработать над тем, чтобы включить его в полный URL.Так что t.co будет полным URL-адресом, который они увидят.

$text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" target=\"_blank\">" .  shorturl2full("$3") . "</a>", $text);  
        $text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" target=\"_blank\">" .  shorturl2full("$3") . "</a>", $text);  
        $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:$2@$3\" target=\"_blank\">$2@$3</a>", $text);  
        return($text);  
}

Это моя неудачная попытка.

Поэтому, если вы нажмете на ссылку, она должна использовать оригинал, но тот, который высм. должен быть вывод shorturl2full

Так же как <a href="t.co">FULLLINK</a>

Я хочу попытаться написать функцию shorturl2full самостоятельно, и я думаю, что у меня есть отличная идеякак это сделать.Проблема в функции link_it ... Нужно передать URL в функцию shorturl2full и показать, что он когда-либо возвращал.

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

Вы можете использовать preg_replace_callback вместо preg_replace http://nz.php.net/manual/en/function.preg-replace-callback.php

function link_it($text)
{
    $text= preg_replace_callback("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is",  'shorturl2full', $text);  
    $text= preg_replace_callback("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is",  'shorturl2full', $text);  
    $text= preg_replace_callback("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i",  'shorturl2full', $text);  
    return($text);  
}

function shorturl2full($url)
{
    $fullLink = 'FULLLINK';
    // $url[0] is the complete match
    //... you code to find the full link
    return '<a href="' . $url[0] . '">' . $fullLink . '</a>';
}

Надеюсь, это поможет

0 голосов
/ 03 октября 2011

В предыдущем ответе я показал функцию с именем make_clickable, которая имеет необязательный параметр обратного вызова, который применяется к каждому URI, если он установлен:

make_clickable($text, 'shorturl2full');

Возможно, это полезно илидает хотя бы некоторые идеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...