使用preg_replace将XML Twitter数据转换为可点击链接

时间:2012-08-02 16:06:29

标签: php xml twitter xml-parsing

我对编码很新,并且想尝试为我的网站构建一个Twitter应用程序。在一点帮助下,我能够掌握所有基础知识,但我现在正在努力解决的是两件事:

  1. 将Twitter XML数据转换为可点击链接
  2. 确保XML文本正确呈现(似乎XML中的“”(引号)呈现不正确(如“”)。
  3. 我似乎已经找到了解决这两个问题的答案,但对于PHP来说这么新,我不确定如何对我的代码实现这两个修复。任何帮助将不胜感激。

    解决方案我发现问题1:

    function twitterify($status) {
    $status = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $status);
    $status = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $status);
    $status = preg_replace("/@(\w+)/", "<a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>", $status);
    $status = preg_replace("/#(\w+)/", "<a href=\"http://search.twitter.com/search?q=\\1\" target=\"_blank\">#\\1</a>", $status);
    return $status;
    }
    

    我发现问题2的解决方案是使用html_entity_decode ...但是我只是不确定如何在我的代码中实现这两个解决方案。

    到目前为止我的代码:

    <?php
                $xmldata = 'https://twitter.com/statuses/user_timeline/carmeloanthony.xml';
                $open = fopen($xmldata, 'r');
                $content = stream_get_contents($open);
                fclose($open);
                $xml = new SimpleXMLElement($content);
    
            ?>
        <table class="table table-striped">
            <?php
    
            foreach($xml->status as $status)
            {
    
            ?>
            <tr>
                <td> <img src=" <?php echo $status->user->profile_image_url; ?>" /> </td>
                <td><strong> <?php echo $status->user->name; ?></strong> <i>@<?php echo $status->user->screen_name; ?></i> <br /> <?php echo $status->text; ?></td>  
                <td style="width: 40px;"><?php echo date("M j",strtotime($status->created_at)); ?></td>
            </tr>
              <?php
            }
    
            ?>
        </table>
    

2 个答案:

答案 0 :(得分:0)

您没有设置编码。设置编码utf-8。

答案 1 :(得分:0)

这就是我得到的......要跑!所需要做的就是更改正则表达式以查找位于行末尾的链接...或者在换行符之前

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<?php
    $xmldata = 'https://twitter.com/statuses/user_timeline/carmeloanthony.xml';
    $open = fopen($xmldata, 'r');
    $content = stream_get_contents($open);
    fclose($open);
    $xml = new SimpleXMLElement($content);
?>
<table class="table table-striped">
    <?php
    foreach($xml->status as $status)
    {
    $statusText=$status->text;
    $pattern = '/((www|http:\/\/)[^ ]+) /';
    $replacement = '<a href="\1">\1</a>';
    $statusText = preg_replace($pattern, $replacement, $statusText);
    ?>
    <tr>
        <td> <img src="<?php echo $status->user->profile_image_url; ?>" /> </td>
        <td><strong><?php echo $status->user->name; ?></strong> <i>@<?php echo $status->user->screen_name; ?></i> <br /><?php echo $statusText; ?></td>  
        <td style="width: 40px;"><?php echo date("M j",strtotime($status->created_at)); ?></td>
    </tr>
      <?php
    }

    ?>
</table>