Ich baue ein kleines Twitter Ding in PHP und ich versuche, URLs, @Antworten und #Hashtags zu analysieren und sie zu anklickbaren Links zu machen.Finde URLs, @Antworten und #Hashtags von Tweets
- Die @ Antworten würde verlinken auf http://twitter.com/replies
Hashtags zu http://search.twitter.com/search?q=%23hashtags
möchte ich eine Klasse für das Parsen von URLs gefunden habe, und ich frage mich, ob dies auch verwendet werden könnten, analysieren @ Antworten und #Hashtags auch:
// 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;
}
}
Gibt es hier eine Frage? Haben Sie Probleme mit diesem Code? – inkedmn
Ja, diese Klasse analysiert nur Links, ich möchte auch @replies und #hashtags analysieren und sie in Links umwandeln – Tom