Превратите URL-адреса в ссылки при отображении последнего твита из учетной записи Twitter с помощью preg_replace - PullRequest
2 голосов
/ 27 ноября 2010

Я собрал кодовый блок ниже, чтобы помочь мне показать последний твит на моем веб-сайте из моей учетной записи Twitter.Тем не менее, это не совсем правильно работает, вы можете помочь мне отладить этот последний маленький кусочек.Я ищу PHP, чтобы превратить его в HTML с тегами ссылок, обернутыми вокруг имен пользователей Twitter и ссылок, которые он делает, используя preg_replace.

Если вы протестируете этот скрипт, вы увидите, что есть проблема скогда он выводит стандартные ссылки в твитах, он ставит закрывающий тег слишком рано после a.Я уверен, что это относительно просто исправить, и, возможно, с экранированием символов или чем-то подобным.

Мой основной кодовый блок:

    <?php
        /** Script to pull in the latest tweet */
        $username='benpaton';
        $format = 'json';
        $tweet = json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}"));
        $latestTweet = htmlentities($tweet[0]->text, ENT_QUOTES);
        $latestTweet = preg_replace('/http:\/\/([[a-z0-9_\.\-\+\&\!\#\~\,]+)/i', '<a href="http://$1" target="_blank">http://$1</a>', $latestTweet);
        $latestTweet = preg_replace('/@([a-z0-9_]+)/i', '<a href="http://twitter.com/$1" target="_blank">@$1</a>', $latestTweet);
        echo $latestTweet;
    ?>

Ответы [ 3 ]

6 голосов
/ 27 ноября 2010

Измените ваше регулярное выражение на:

$latestTweet = preg_replace('/http:\/\/([a-z0-9_\.\-\+\&\!\#\~\/\,]+)/i', '<a href="http://$1" target="_blank">http://$1</a>', $latestTweet);

Это сработало для меня.

Полный код

<?php
    /** Script to pull in the latest tweet */
    $username='benpaton';
    $format = 'json';
    $tweet = json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}"));
    $latestTweet = htmlentities($tweet[0]->text, ENT_QUOTES);
    $latestTweet = preg_replace('/http:\/\/([a-z0-9_\.\-\+\&\!\#\~\/\,]+)/i', '<a href="http://$1" target="_blank">http://$1</a>', $latestTweet);
    $latestTweet = preg_replace('/@([a-z0-9_]+)/i', '<a href="http://twitter.com/$1" target="_blank">@$1</a>', $latestTweet);
    echo $latestTweet;
?>
0 голосов
/ 17 января 2011

Весь код содержит ошибки или неполон!То, что вы хотите сделать, это что-то вроде:

$tweets[$i]['text_html'] = htmlspecialchars($tweet['text']);
$tweets[$i]['text_html'] = preg_replace('%(http://([a-z0-9_.+&!#~/,\-]+))%i','<a href="http://$2">$1</a>',$tweets[$i]['text_html']);
$tweets[$i]['text_html'] = preg_replace('/@([a-z0-9_]+)/i','<a href="http://twitter.com/$1">@$1</a>',$tweets[$i]['text_html']);
0 голосов
/ 27 ноября 2010

Попробуйте это:

<?php
/** Script to pull in the latest tweet */
$username='benpaton';
$format = 'json';
$tweet = json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}"));
$latestTweet = htmlentities($tweet[0]->text, ENT_QUOTES);
$latestTweet = preg_replace('%http://[a-z0-9_.+&!#~/,\-]+%', '<a href="http://$1" target="_blank">http://$1</a>', $latestTweet);
$latestTweet = preg_replace('/@([a-z0-9_]+)/i', '<a href="http://twitter.com/$1" target="_blank">@$1</a>', $latestTweet);
echo $latestTweet;
?>
...