Оберните тег вокруг ссылки в твите с помощью php - PullRequest
3 голосов
/ 23 марта 2012

Здравствуйте, мне нужно добавить тег href вокруг ссылки в твите в php, например, если у меня есть твит, подобный этому:

@username tweet body message http://t.co/sfr34s5

Мне нужно превратить это в php:

@username tweet body message <a href="http://t.co/sfr34s5">http://t.co/sfr34s5</a>

Я думаю, что это можно сделать с помощью preg_replace, и у меня есть что-то похожее, которое уже заключает в себе ссылку вокруг твиттера @username, как показано ниже:

$tweet= preg_replace('/@([a-z0-9_]+)/i', '<a href="http://twitter.com/$1" target="_blank">@$1</a>', $tweet);

Как мне отредактировать часть этого регулярного выражения, чтобы поместить тег вокруг URL в появившихся твитах?

1 Ответ

9 голосов
/ 23 марта 2012

Попробуйте следующий код:

$source = '@username tweet body message http://t.co/sfr34s5';
$pattern = '/(http:\/\/[a-z0-9\.\/]+)/i';
$replacement = '<a href="$1" target="_blank">$1</a>';

$source = preg_replace($pattern, $replacement, $source); 

Регулярное выражение будет соответствовать всем строкам, которые начинаются с 'http://' и сопровождаются последовательностью буквенно-цифровых значений, косой чертой или точками.

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

$pattern = '/(http:\/\/t\.co\/[a-z0-9]+)/i';

Это будет соответствовать только 'http://t.co/[alnum-chars].

Вам придется изменить шаблон в соответствии с вашими требованиями, если вам нужно сопоставить все URL-адреса. Например. чтобы соответствовать http://t.co/abcde?x=1&y=2, вам необходимо использовать следующий шаблон:

$pattern = '/(http:\/\/[a-z0-9\.\/?=&]+)/i';

Я протестировал это на PHP5.3, и он работал с указанным вами URL.

...