PHP Twitter заменит ссылку и hashtag с реальной ссылкой

Я зацикливаюсь на ответе JSON от Twitter API. Каждый ответ API дает мне твит, похожий на:

Привет, мое имя @john, и я люблю #soccer, навещаю меня

Я пытаюсь заменить @john и вставлять <a href=http://twitter.com/john>@john</a> но <a href=http://twitter.com/john>@john</a> с запятой ( , ) после @john .

Как заменить точки, запятые и т. Д. До и после тега?

 $str = preg_replace("/@(\w+)/i", "<a href=\"http://twitter.com/$1\">$0</a>", $str); 

Heres – функция, которая преобразует хэштеги, пользовательские ссылки и ссылки на ссылки, используя данные сущностей в твите из API Twitter.

 <?php function tweet_html_text(array $tweet) { $text = $tweet['text']; // hastags $linkified = array(); foreach ($tweet['entities']['hashtags'] as $hashtag) { $hash = $hashtag['text']; if (in_array($hash, $linkified)) { continue; // do not process same hash twice or more } $linkified[] = $hash; // replace single words only, so looking for #Google we wont linkify >#Google<Reader $text = preg_replace('/#\b' . $hash . '\b/', sprintf('<a href="https://twitter.com/search?q=%%23%2$s&src=hash">#%1$s</a>', $hash, urlencode($hash)), $text); } // user_mentions $linkified = array(); foreach ($tweet['entities']['user_mentions'] as $userMention) { $name = $userMention['name']; $screenName = $userMention['screen_name']; if (in_array($screenName, $linkified)) { continue; // do not process same user mention twice or more } $linkified[] = $screenName; // replace single words only, so looking for @John we wont linkify >@John<Snow $text = preg_replace('/@\b' . $screenName . '\b/', sprintf('<a href="https://www.twitter.com/%1$s" title="%2$s">@%1$s</a>', $screenName, $name), $text); } // urls $linkified = array(); foreach ($tweet['entities']['urls'] as $url) { $url = $url['url']; if (in_array($url, $linkified)) { continue; // do not process same url twice or more } $linkified[] = $url; $text = str_replace($url, sprintf('<a href="%1$s">%1$s</a>', $url), $text); } return $text; } 

Чтобы сделать хэш-теги, сделайте это

 $item_content = preg_replace("/#([a-z_0-9]+)/i", "<a href=\"http://twitter.com/search/$1\">$0</a>", $item_content); 
 preg_replace("/@(\w+)/", "<a href=http://twitter.com/$1>@$1</a>", $string)"