• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

triplexim32

ajuda preg_replace

4 mensagens neste tópico

tenho este codigo:

//[url]http://www.example.com/[/url]
    $patterns[] = "#\[url\]([a-z]+?://){1}([^\"'<>]{0,60}?)\[/url\]#Smi";  //Match only if length is <= 60 chars
    $replacements[] = '<a <!-- nobr -->href="\1\2" onclick="window.open(this.href); return false;"><!-- /nobr -->\1\2</a>';
    $patterns[] = "#\[url\]([a-z]+?://){1}([^\"'<>\[\]]{60})([^\"'<>]*?)\[/url\]#Smi";  //Match only if length is >= 60 chars
    $replacements[] = ' <!-- nobr --><a href="\1\2\3" onclick="window.open(this.href); return false;">\1\2...</a><!-- /nobr --> ';

    //[url]www.example.com[/url]
    $patterns[] = "#\[url\]([^\[\"'<>]{0,60}?)\[/url\]#Smi";  //Match only if length is <= 60 chars
    $replacements[] = '<a <!-- nobr -->href="http://\1" onclick="window.open(this.href); return false;"><!-- /nobr -->\1</a>';
    $patterns[] = "#\[url\]([^\"'<>\[\]]{60})([^\"'<>]*?)\[/url\]#Smi";  //Match only if length is >= 60 chars
    $replacements[] = ' <!-- nobr --><a href="http://\1\2" onclick="window.open(this.href); return false;">\1...</a><!-- /nobr --> ';

    //[url=http://www.example.com]Lorem Ipsum[/url]
    $patterns[] = "#\[url=([a-z]+?://){1}([^\"'<>\[\]]*?)\](.*?)\[/url\]#Smi";
    $replacements[] = '<a <!-- nobr -->href="\1\2" onclick="window.open(this.href); return false;"><!-- /nobr -->\3</a>';

    //[url=www.example.com]Lorem Ipsum[/url]
    $patterns[] = "#\[url=([^\[\"'<>]*?)\](.*?)\[/url\]#Smi";
    $replacements[] = '<a <!-- nobr -->href="http://\1" onclick="window.open(this.href); return false;"><!-- /nobr -->\2</a>';

    $message = preg_replace($patterns, $replacements, $message);

Isto é parte dum ficheiro da board XMB, e serve para trocar o bbcode dos URL's por HTML.

O que quero fazer é pegar no link que esta no meio das tags [*url][*/url] e trata-lo aparte numa função,

exemplo:

Function altera (valor){
     return valor+"asd";//isto é apenas um mero exemplo.
}

   $patterns[] = "#\[url=([a-z]+?://){1}([^\"'<>\[\]]*?)\](.*?)\[/url\]#Smi" , altera($1);// <<<<<<----
   $replacements[] = '<a <!-- nobr -->href="\1\2" onclick="window.open(this.href); return false;"><!-- /nobr -->\3</a>';
   $message = preg_replace($patterns, $replacements, $message);

como e que posso fazer isto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse código que aí tens faz apenas isso pelo que tens que o comentar e colocar tu o que queres fazer.

Agora não sei se esses arrays $patterns e $replacements têm mais alguma coisa. Se tiver, tens que comentar apenas essas atribuções e deixar a última linha. Logo a seguir, ou logo antes colocar o eu código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse código que aí tens faz apenas isso pelo que tens que o comentar e colocar tu o que queres fazer.

Agora não sei se esses arrays $patterns e $replacements têm mais alguma coisa. Se tiver, tens que comentar apenas essas atribuções e deixar a última linha. Logo a seguir, ou logo antes colocar o eu código.

podes dar um exemplo sff?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem ja consegui, mas ha um problema  :wallbash::

//[url]http://www.example.com/[/url]
    $patterns[] = "#\[url\]([a-z]+?://){1}([^\"'<>]{0,60}?)\[/url\]#Smi";  //Match only if length is <= 60 chars
    $replacements[] = '<a <!-- nobr -->href="'.trocaURL('\1\2').'" onclick="window.open(this.href); return false;"><!-- /nobr -->\1\2</a>';

function trocaURL($valor)
{
$link = $valor;
$linkrefer = 'http://www.redirect.no.sapo.pt/redirect.html?';//referencia para nao guardar $_SERVER["HTTP_REFERER"]
$res="";

for ($i=0; $i < strlen($link); $i++)
{
	$res=$res.$link[$i]."!";
}

return $res;
}

seu eu na função !"function trocaURL($valor)"! fizer "return $link" ele vai-me devolver o link todo certinho, mas se fizer "return $res" ele vai-me devolver a string (já modificada) que foi chamada na função, ou seja: '\1\2'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora