2009-07-21 40 views
4

我正在PHP中構建一個小小的Twitter事物,我試圖解析URL,@replies和#hashtags並將它們變成可點擊的鏈接。從推文中查找URL,@replies和#hashtags

我發現一個類解析URL,我想知道,如果這也可以用來解析@replies和#hashtags以及:

// http://josephscott.org/archives/2008/11/makeitlink-detecting-urls-in-text-and-making-them-links/  
class MakeItLink { 
protected function _link_www($matches) { 
    $url = $matches[2]; 
    $url = MakeItLink::cleanURL($url); 
    if(empty($url)) { 
     return $matches[0]; 
    } 

    return "{$matches[1]}<a href='{$url}'>{$url}</a>"; 
} 

public function cleanURL($url) { 
    if($url == '') { 
     return $url; 
    } 

    $url = preg_replace("|[^a-z0-9-~+_.?#=!&;,/:%@$*'()x80-xff]|i", '', $url); 
    $url = str_replace(array("%0d", "%0a"), '', $url); 
    $url = str_replace(";//", "://", $url); 

    /* If the URL doesn't appear to contain a scheme, we 
    * presume it needs http:// appended (unless a relative 
    * link starting with/or a php file). 
    */ 
    if(
     strpos($url, ":") === false 
     && substr($url, 0, 1) != "/" 
     && !preg_match("|^[a-z0-9-]+?.php|i", $url) 
    ) { 
     $url = "http://{$url}"; 
    } 

    // Replace ampersans and single quotes 
    $url = preg_replace("|&([^#])(?![a-z]{2,8};)|", "&#038;$1", $url); 
    $url = str_replace("'", "&#039;", $url); 

    return $url; 
} 

public function transform($text) { 
    $text = " {$text}"; 

    $text = preg_replace_callback(
     '#(?<=[\s>])(\()?([\w]+?://(?:[\w\\x80-\\xff\#$%&~/\[email protected]\[\](+]|[.,;:](?![\s<])|(?(1)\)(?![\s<])|\)))*)#is', 
     array('MakeItLink', '_link_www'), 
     $text 
    ); 

    $text = preg_replace('#(<a([^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $text); 
    $text = trim($text); 

    return $text; 
} 
} 
+0

這裏有問題嗎?你有這個代碼的麻煩嗎? – inkedmn 2009-07-21 12:54:32

+0

是的,這個類只解析鏈接,我想也解析@replies和#hashtags並將它們變成鏈接 – Tom 2009-07-21 13:26:09

回答

20

我想你要做的基本上是什麼我已經包含在下面。在return語句之前,您可以在transform方法中添加這兩個語句。

$text = preg_replace('#@(\w+)#', '<a href="http://twitter.com/$1">$0</a>', $text); 
$text = preg_replace('/#(\w+)/', '<a href="http://twitter.com/search?q=%23$1&src=hash">$0</a>', $text); 

這是你在找什麼?

+0

這是工作的愛,謝謝:) – Tom 2009-07-21 14:29:41

3

推特recently released開源javarubygem)他們用於查找用戶名,哈希標記,列表和URL的代碼的實現。

它是非常正則表達式。