代码之家  ›  专栏  ›  技术社区  ›  rhodesjason

如何使用PHP preg_replace链接Twitter用户名?

  •  4
  • rhodesjason  · 技术社区  · 14 年前

    <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);
    

    **编辑:。。。样品数据是否符合要求?

    $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;
    }
    
    4 回复  |  直到 14 年前
        1
  •  5
  •   LarsH    14 年前

    为什么 \ _ ? 如果你把 \

    更改 \1 \\1 这样您就可以确定反斜杠是转义的;或者更好(因为PHP 4.0.4) $1 . 但同样,它也应该按原样工作,用单引号括起来。

    $pattern = '/@([a-zA-Z0-9_]+)/';
    $replace = '<a href="http://twitter.com/$1">@$1</a>';
    
        2
  •  2
  •   Akas84    13 年前

    我也更新了一些支持标签的函数:

    函数linkify($string,$twitter=false){

    //reg exp模式

    //将字符串URL转换为活动链接 $new_string=preg_replace($pattern,“\0”,$string);

    如果($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);
    

    }

    返回$new_string;

        3
  •  0
  •   Refiner    12 年前

    找到了对url、@usernames和#标签有效的方法:

    http://davidwalsh.name/linkify-twitter-feed

        4
  •  0
  •   Steve Kinzey    11 年前

    Twitter已经更新了他们的api,至少对我来说,它更加用户友好。查看dev.twitter.com/docs/twitter-for-websites上的文档 click here . 您必须首先创建一个应用程序,按照逐步说明进行操作,然后创建一个小部件。您在下面看到的小部件显示我的tweets,但是您可以创建一个小部件来显示时间线上的所有操作或搜索结果、列表等。。。

         <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>