Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera,
Estou usando a seguinte função/expressão para localizar ARROBAS na string e adicionar um link:
$texto = ereg_replace("@[A-Za-z0-9]*", "<a href=\"perfil.php?usuario=\\0\">\\0</a>", $texto);
Isto serve para que, quando um usuário citar outro, apareça um link para o perfil deste.
Tudo bem, está funcionando perfeito! Porém, está confundindo com E-MAILS.
Exemplo:
Olá @imasters. Funciona perfeitamente!
Olá forum@imasters.com.br. Funciona incorretamente!
No e-mail, ele pega @imasters e linka para o perfil também!
Como faço para que ele não confunda com e-mails?
Sei que eu poderia adicionar um espaço antes ou após a expressão, porém não resolveria meu problema, pois o usuário pode apenas postar
@fulano
Deveria funcionar da mesma forma que com ou sem espaço antes da citação.
Como faço para resolver esse "conflito"?
Desde já obrigado!
$texto = preg_replace ('/[a-zA-Z0-9._-]+(@[a-zA-Z0-9._-]+)/', '<a href="perfil.php?usuario=\1">\1</a>', $texto);
Não testei, mas o objetivo é substituir algo@qualquer_coisa.com por
<a href="perfil.php?usuario=@qualquer_coisa.com">@qualquer_coisa.com</a>
(Não aceitando qualquer "e-mail" que não possua caracteres antes do @)
É isso?
A funcão ereg_replace está depreciada, e segundo manual será removida no php6.0 portanto é melhor já adaptar o codigo para sua função sucessora a preg_replace
$texto = 'Olá @rafael, meu email é rafael@regex.com';
$texto = preg_replace('/(^|\s)@([A-Za-z0-9]*)/', '\1<a href=\"perfil.php?usuario=\\2\">@\\2</a>',$texto);
echo $texto;
Abraço!
Olha o twitter da vida aí :b
Dica: Você também pode usar o string_replace();
Dica: Você pode usar o string_replace();
Porém os domínios (e usuários) são variáveis... Nesse caso, não vejo uso do str_replace()
>
Dica: Você pode usar o string_replace();
Porém os domínios (e usuários) são variáveis... Nesse caso, não vejo uso do str_replace()
Sim, por isso que disse "dica". Não tanto para ele ir usando, mais o string_replace(); é o mais simples, para ir pegando o jeito.
Obrigado a todos pelas respostas!
Rafael,
Sua função funcionou perfeitamente.
Você consegue me explicar esta expressão de preg_replace, e por que é tão diferente do ereg_replace?
Um abraço, e mais uma vez obrigado!
>
Obrigado a todos pelas respostas!
Rafael,
Sua função funcionou perfeitamente.
Você consegue me explicar esta expressão de preg_replace, e por que é tão diferente do ereg_replace?
Um abraço, e mais uma vez obrigado!
Na verdade não são tão diferentes assim, mas a preg_replace é mais completa e rápida e é possivel limitar as trocas além retornar uma váriavel com numero de ocorrencias, e pra não manter duas funções que fazem basicamente a mesma coisa, descontinuaram a ereg
Abraço
Não muito bonito , mas serviu, olha se seve para você ;D
<?