Pergunta

Preciso de ajuda para melhorar esta função que fiz para analisar links em um Twitter.Cria links para hashtags e @replys.Tudo funciona bem, o problema é que se uma hashtag ou @reply tiver um caractere de pontuação no final sem espaço, ela será adicionada ao URL HREF.

Por exemplo, se eu tweetasse "Gosto muito de #pizza e #pop", o link para #pizza estaria errado, pois conteria uma vírgula.

Não sou muito bom com Regex, demorei um pouco só para fazer funcionar, então qualquer ajuda seria incrível!

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;

}

Foi útil?

Solução

Modificação mais simples do seu código para fazer o que você deseja:

$description = preg_replace("#(^|[\n ])\#(\w+)#ise", "'\\1<a href=\"".$pre."/hash/\\2\" rel=\"nofollow\" class=\"hash ".$colour."\">#\\2</a>'", $description);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top