PHP Twitter заменит ссылку и хэштег на реальную ссылку - PullRequest
3 голосов
/ 26 сентября 2010

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

Привет, меня зовут @john, и я люблю #soccer, посетите меня

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

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

Ответы [ 4 ]

11 голосов
/ 26 сентября 2010
$str = preg_replace("/@(\w+)/i", "<a href=\"http://twitter.com/$1\">$0</a>", $str);
9 голосов
/ 04 июля 2013

Здесь есть функция, которая преобразует хештеги, упоминания пользователей и URL-адреса в ссылки, используя данные «сущностей» в твите из Twitter API.

<?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;
}
4 голосов
/ 10 августа 2011

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

$item_content = preg_replace("/#([a-z_0-9]+)/i", "<a href=\"http://twitter.com/search/$1\">$0</a>", $item_content);
3 голосов
/ 26 сентября 2010
preg_replace("/@(\w+)/", "<a href=http://twitter.com/$1>@$1</a>", $string)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...