Я хочу найти свойство текста моих объектов статуса Twitter и заменить имя @username на <a href="http:/twitter.com/username">@username</a>
. То, что я пробовал до сих пор, выглядит следующим образом:
$pattern = '/([@]{1})([a-zA-Z0-9\_]+)/'; $replace = '<a href="http://twitter.com/\2">\1\2</a>'; $new_string = preg_replace($pattern, $replace, $text);
Но никаких замен нет. Я знаю, что мой reg exp не прав, но я не могу точно определить, где / почему. Помогите?
** Изменить: … образцы данных по запросу?
$text = '@janesmith I like that, but my friend @johndoe said it better.';
Желаемый результат:
@janesmith Мне это нравится, но мой друг @johndoe сказал это лучше.
***** MY FULL FUNCTION *****
function linkify($string, $twitter=false) { // reg exp pattern $pattern = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; // convert string URLs to active links $new_string = preg_replace($pattern, "<a href=\"\\0\">\\0</a>", $string); if ($twitter) { $pattern = '/@([a-zA-Z0-9_]+)/'; $replace = '<a href="http://twitter.com/\1">@\1</a>'; $new_string = preg_replace($pattern, $replace, $new_string); } return $new_string; }
Почему \
там перед _
? Работает ли он, если вы вытащили из него? Хотя это не должно было нарушить функциональность …
Возможно, было бы полезно изменить \1
на \\1
чтобы вы были уверены, что обратная косая черта сбрасывается; или лучше (начиная с PHP 4.0.4) $1
. Но опять же, он должен был работать как есть, в одинарных кавычках.
Кроме того, вы можете упростить:
$pattern = '/@([a-zA-Z0-9_]+)/'; $replace = '<a href="http://twitter.com/$1">@$1</a>';
Я немного обновил функцию поддержки хэштегов:
function linkify ($ string, $ twitter = false) {
// reg exp pattern
$ pattern = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9-.]+.[a-zA-Z]{2,3}(\/\S *) / ";
// конвертировать строковые URL-адреса в активные ссылки $ new_string = preg_replace ($ pattern, "\ 0", $ string);
if ($ twitter) {
$pattern = '/\@([a-zA-Z0-9_]+)/'; $replace = '<a href="http://twitter.com/\1">@\1</a>'; $new_string = preg_replace($pattern, $replace, $new_string); $pattern = '/\#([a-zA-Z0-9_]+)/'; $replace = '<a href="http://twitter.com/search/#\1">#\1</a>'; $new_string = preg_replace($pattern, $replace, $new_string);
}
return $ new_string; }
Нашли это, чтобы работать для URL-адресов, @usernames и #hashtags:
Twitter обновил их api и, по крайней мере, для меня, это более удобный пользовательский интерфейс. Ознакомьтесь с документацией, найденной на странице dev.twitter.com/docs/twitter-for-websites. Сначала вы должны создать приложение, следуйте пошаговым инструкциям, затем создайте виджет. Виджет, который вы видите ниже, отображает мои твиты, но вы можете создать тот, который отображает все действия на вашей временной шкале или результаты поиска, списки и т. Д. …
<a class="twitter-timeline" ref="https://twitter.com/SKAmerica" data-widget-id="359949405157203970">Tweets by @SKAmerica</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id))js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>