我正在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};)|", "&$1", $url);
$url = str_replace("'", "'", $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;
}
}
這裏有問題嗎?你有這個代碼的麻煩嗎? – inkedmn 2009-07-21 12:54:32
是的,這個類只解析鏈接,我想也解析@replies和#hashtags並將它們變成鏈接 – Tom 2009-07-21 13:26:09