конвертировать несколько текстовых URL, начинающихся с www или http, в абсолютные ссылки - PullRequest
1 голос
/ 28 февраля 2011

Есть много похожих вопросов, но я пробовал около 15 различных примеров preg_match, и ни один из них не работает полностью.

У меня много пользовательского контента, и у большинства из него есть URL-адреса .. иногда в форме http://www.site.com/page, иногда как www.site.com и довольно часто в скобках (www.site.com/ page.html).

Мне не повезло найти шаблон, который будет анализировать строку и преобразовывать все это в абсолютные ссылки html. Хотите знать, если кто-нибудь может мне помочь. Я нашел несколько регулярных выражений для поиска выражений, которые, казалось бы, работали, но я не знаю, как правильно преобразовать ссылку в абсолютную HTML, когда некоторые с http, а некоторые без ...

Вот несколько выражений, которые я пробовал:

function makeLinks($text) {  
    $text = preg_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
        '(<a href="\\1">\\1</a>)', $text);  
    $text = preg_replace('(www\.[a-zA-Z0-9\-]\.[^ ]+)',
        '(<a href="\\1">\\1</a>)', $text);  

        return $text;
}

function makeLinks($text) {
    $text = preg_replace('~(?:www|http://)\S+~', '<a href="$0">$0</a>', $text);

        return $text;
}

function makeLinks($text) {
    $text = preg_replace( '@(?<![.*">])\b(?:(?:https?|ftp|file)://|[a-z]\.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]@i', '<a href="\0" target="_blank">\0</a>', $text );

        return $text;
}

Ответы [ 2 ]

2 голосов
/ 06 марта 2011

Я закончил тем, что использовал эту строку, которая, кажется, работает хорошо во всех необходимых случаях:

function makeLinks($text) {
    $text = preg_replace('%(((f|ht){1}tp://)[-a-zA-^Z0-9@:\%_\+.~#?&//=]+)%i',
    '<a href="\\1">\\1</a>', $text);
    $text = preg_replace('%([[:space:]()[{}])(www.[-a-zA-Z0-9@:\%_\+.~#?&//=]+)%i',
    '\\1<a href="http://\\2">\\2</a>', $text);

        return $text;
}
0 голосов
/ 05 марта 2011

Это было хорошее начало:

function makeLinks($text) {
    $text = preg_replace('~(?:www|http://)\S+~', '<a href="$0">$0</a>', $text);
    return $text;
}

$ 0 - полное совпадение.Если вы группируете только раздел без http:// или www. или http://www., вы можете объединить это с фронтом.

Попробуйте, если вы все еще ищете ответ:

function makeLinks($text) {
    $text = preg_replace('~(?:http://|)(?:www\.|)(\S+)~', '<a href="http://www.$1">$0</a>', $text);
    return $text
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...