Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
To tentando escrever uma linha de codigo pra reconhecer links:
Até agora tenho isso
preg_replace('@((http://)[a-zA-Z0-9./?&_\-]+)@', '<a href="$1">$1</a>', $row['comment'])
Queria uma que reconhecesse links que começam com www tambem e que adicionasse o http://.
Sua função é bacana mesmo, mas acho que nao resolve o que eu quero, adicionar o http:// quando o usuario digita por exemplo www.uol.com.br pra tornar o link absoluto.
Acho que essa resolveria, nao testei ainda aqui.
function achaLink($txt)
{
$txt = str_replace("\n", "<br>", $txt);
$txt = str_replace("http://",'>http://", "", $txt);//retira o "http://" dos links, para ficarem iguais.
$txt = eregi_replace('www\.([a-z0-9-]*)\.([a-z0-9\/\?_&=.\-]*)', '<a href="http://www.\\1.\\2" target="_blank">http://www.\\1.\\2', $txt);
return($txt);
}
O problema é que a função eregi_replace está deprecated. O php.net ainda diz que ela será excluída.
To começando a estudar expressoes regulares, voce pode me explicar qual a diferença dessa:
'@((http://)[a-zA-Z0-9./?&_\-#=;%]+)@'
pra essa que voce escreveu naquele script
"/http:\/\/(www\.|.*?\/)?([a-zA-Z0-9]+|_|-)+(\.(([0-9a-zA-Z]|-|_|\/|\?|=|&|%)+))+/i"
em termos práticos?
Ainda vou fazer uns testes aqui mas acho que as duas sao basicamente a mesma coisa nao? com excessa do modifier i no final.
E valeu pelo link!
retirar http:// não é bom, pois há links sem www.
imagine isto:
>
http://subdominio.dominio.com
Se retirar o http://
>
subdominio.dominio.com
A ER vai procurar www e não encontrará. Isso não será considerado um link.
Em vez de eregi_replace, use preg_replace, com o modificador "i"
Eu nao quero tirar http://, e a ER que uso nao procura www, o que eu estou tentando fazer é uma funcao pra adicionar o http:// caso o usuario nao o inclua na url.
>
Eu nao quero tirar http://, e a ER que uso nao procura www, o que eu estou tentando fazer é uma funcao pra adicionar o http:// caso o usuario nao o inclua na url.
>
Acho que essa resolveria, nao testei ainda aqui.
function achaLink($txt)
{
$txt = str_replace("\n", "<br>", $txt);
$txt = str_replace("http://",'>http://", "", $txt);//retira o "http://" dos links, para ficarem iguais.
$txt = eregi_replace('www\.([a-z0-9-]*)\.([a-z0-9\/\?_&=.\-]*)', '<a href="http://www.\\1.\\2" target="_blank">http://www.\\1.\\2', $txt);
return($txt);
}
Essa função que você postou achando que resolveria retira http://. Por isso alertei você sobre isso.
Ela retira mas logo depois adiciona novamente, não?
adiciona apenas se casar com o padrão da ER, ou seja, só adiciona se encontrar o www.
eh vero,
vo tentar fazer alguma coisa com if aqui pra adicionar esse http:// caso o usuario nao inclua na url.
Consegui parte do que queria com um if, o script ficou assim:
$comment=htmlspecialchars($_GET['comment']);
if(preg_match('@((www\.)[a-zA-Z0-9./?&_\-#=;%]+)@',$comment)){
$comment=preg_replace('@((www\.)[a-zA-Z0-9./?&_\-#=;%]+)@', '<a href="[http://$1">$1',](http://%241) $comment);
}elseif(preg_match('@((http://)[a-zA-Z0-9./?&_\-#=;%]+)@',$comment)){
$comment=preg_replace('@((http://)[a-zA-Z0-9./?&_\-#=;%]+)@', '<a href="$1">$1</a>', $comment);
}
Se o usario colocar algo com www. ele transforma em link e se colocar algo com http:// tambem tranforma. Ainda quero colocar outro if pra reconhecer links do tipo bbc.com por exemplo.
Caso alguem saiba fazer isso com menos linhas de codigo, de uma forma mais simples por favor compartilhe ae!
Ainda estou tendo um problema com esse script. SE alguem puder ajudar...
if(preg_match('@([^(http://)]*(www\.)[a-zA-Z0-9./?&_\-#=;%]+)@i',$comment)){
$comment=preg_replace('@((www\.)[a-zA-Z0-9./?&_\-#=;%]+)@i', 'http://$1', $comment);
}
if(preg_match('@((http://)[a-zA-Z0-9./?&_\-#=;%]+)@i',$comment)){
$comment=preg_replace('@((http://)[a-zA-Z0-9./?&_\-#=;%]+)@i', '<a href="$1">$1</a>', $comment);
}
O erro aparece quando ha mais de um link na pagina.
Preciso de uma expressao regular que transforme esses links corretamente. Alguma sugestao?
Outra coisa, É melhor colocar a função preg_replace ao enviar a string pro banco de dados ou só quando vou exibir a string do banco de dados pro usuario?
Até gora to colocando a função ao enviar prpo banco de dados, acredito que assim a página carrega mais rápido. Há algum problema nisso?