2009-08-12 3 views
0

Ich brauche Hilfe, diese Funktion zu verbessern, die ich für die Analyse der Links in einem Twitter gemacht habe. Es erstellt Links für Hashtags und @Replys. Es funktioniert alles gut, das Problem ist, wenn ein Hashtag oder @ Reply ein Interpunktionszeichen am Ende ohne Leerzeichen hat, wird es der HREF-URL hinzugefügt.Hilfe mit preg_replace, halt bei non alpa_numeric Zeichen

Zum Beispiel, wenn ich twitterte "Ich mag #pizza, und #pop" wirklich, wäre der Link für die #pizza falsch, da es ein Komma darin haben wird.

Ich bin nicht sehr gut mit Regex, das hat mich eine Weile gebraucht, nur um das funktionieren zu lassen, also wäre jede Hilfe großartig!

function parse_tweet($description, $colour='', $external=false) { 
if ($external == true) $pre = 'http://politwitter.ca'; else $pre = ''; 
$description = preg_replace("/(http:\/\/[^\s]+)/", "<a href=\"$1\" target=\"_blank\">$1</a>", $description); 
$description = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#ise", "'\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>'", $description); 
$description = preg_replace("#(^|[\n ])@([^ \"\t\n\r<]*)#ise", "'\\1<a href=\"".$pre."/user/\\2\" rel=\"nofollow\">@\\2</a>'", $description); 
$description = preg_replace("#(^|[\n ])\#([^ \"\t\n\r<]*)#ise", "'\\1<a href=\"".$pre."/hash/\\2\" rel=\"nofollow\" class=\"hash ".$colour."\">#\\2</a>'", $description); 
return $description; 

}

Antwort

2

Simplest Modifikation des Codes zu tun, was Sie wollen:

$description = preg_replace("#(^|[\n ])\#(\w+)#ise", "'\\1<a href=\"".$pre."/hash/\\2\" rel=\"nofollow\" class=\"hash ".$colour."\">#\\2</a>'", $description); 
+0

danke Ihnen so sehr, dass große Werke! Ich habe die gleiche Änderung an der Regel in der obigen Zeile vorgenommen. – Canadaka