Преобразование ссылок, работающее с уценкой - PullRequest
0 голосов
/ 25 апреля 2011
function makeLinks($text) {
    $text = preg_replace('%(?<!href=")(((f|ht){1}(tp://|tps://))[-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;
}

Пропускает, если у меня есть что-то вроде этого: - www.website.org (дефис, затем пробел) в начале строки.Если у меня есть - www.website.org - www.website.org, он ловит второй.

Разве это не должно быть покрыто пробелом во втором preg_replace?

Iтакже пытался %(\s\n\r(){})

Я запускаю его через уценку, но только после (markdown(makeLinks($foo))), поэтому я подумал, что это не должно мешать, но когда я снимаю уценку, и все просто звучит в одномлиния, это делает ссылки из них.Если я поставлю makeLinks(markdown($foo)), то он будет вести себя так же, как и изначально ... не делая ссылки из тех, которые начинаются с www в начале элементов списка.

1 Ответ

0 голосов
/ 25 апреля 2011

Это довольно хитрая работа с регулярными выражениями. Вот регулярное выражение, которое я рекомендовал бы вместо определения URL:

%(?<!href="?)(((f|ht)(tp://|tps://))?[a-zA-Z0-9-].[-a-zA-^Z0-9@:\%_\+.~#?&//=]+)%i

Должно быть намного надежнее, чем те, что есть у вас сейчас.

...