Foros del Web » Programando para Internet » PHP »

[PHP] Ayuda preg_replace();

Estas en el tema de [PHP] Ayuda preg_replace(); en el foro de PHP en Foros del Web. Hola a todos tengo una duda con el comando preg_replace estoy haciendo una función que cambie una url por un link automáticamente el código es ...
  #1 (permalink)  
Antiguo 06/07/2003, 14:59
 
Fecha de Ingreso: julio-2003
Ubicación: Mexico
Mensajes: 12
Antigüedad: 20 años, 9 meses
Puntos: 0
[PHP] Ayuda preg_replace();

Hola a todos tengo una duda con el comando preg_replace estoy haciendo una función que cambie una url por un link automáticamente el código es el siguiente

<?
function busca_url($_valor='')
{
$_remplazado = preg_replace("/(http:\/\/\S+)|( ftp:\/\/\S+)/i ","<a href='\\01\\02'>\\01\\02</a>\n",$_valor);
$_remplazado = preg_replace("/(\w+@\S+)/i","<a href='mailto:\\01'>\\01</a>\n",$_remplazado);
return $_remplazado;
}
echo busca_url('aquí debe haber una url http://nxtch-template.webcindario.com webmaster: [email protected]');
echo "<br><br>";
?>

Todo funciona correctamente la url es transformada en un link pero cuando la cadena ya es un link por ejemplo

echo busca_url('aquí debe haber una url <a href="http://algo.com">algo</a><br>');

El script me devuelve
aquí debe haber una url algo.com'>http://algo.com">algo.com
y en el código me devuelve:
aquí debe haber una url <a href="<a href='http://algo.com">algo.com</a>'>http://algo.com">algo.com</a></a>
que puedo hacer para evitar que haga el reemplazo cuando el <a href exista?
  #2 (permalink)  
Antiguo 06/07/2003, 18:44
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Te recomiendo buscarle por el lado de preg_match_all. Con esta función tienes mucho más control sobre las coincidencias encontradas, y puedes tomar decisiones sobre que hacer con cada tipo de resultados obtenidos.

Saludos!
__________________
Manoloweb
  #3 (permalink)  
Antiguo 07/07/2003, 10:08
 
Fecha de Ingreso: julio-2003
Ubicación: Mexico
Mensajes: 12
Antigüedad: 20 años, 9 meses
Puntos: 0
y como las uso?
  #4 (permalink)  
Antiguo 07/07/2003, 10:31
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Sabes que? acabo de pensar en otra solución...

Código PHP:
$texto1="aquí debe haber una url <a href='http://algo.com'>algo</a><br>";
$texto2="aquí debe haber una url http://www.algo.com";

function 
busca_url($_valor=''

if (!
eregi("<a",$_valor)){
$_remplazado preg_replace("/(http:\/\/\S+)|( ftp:\/\/\S+)/i ","<a href='\\01\\02'>\\01\\02</a>\n",$_valor); 
$_remplazado preg_replace("/(\w+@\S+)/i","<a href='mailto:\\01'>\\01</a>\n",$_remplazado); 
return 
$_remplazado
} else {
return 
$_valor;
}

Que te parece??
__________________
Manoloweb

Última edición por Manoloweb; 07/07/2003 a las 10:33
  #5 (permalink)  
Antiguo 07/07/2003, 11:10
 
Fecha de Ingreso: julio-2003
Ubicación: Mexico
Mensajes: 12
Antigüedad: 20 años, 9 meses
Puntos: 0
Me parece una exelente solucion pero... si la cadena contiene un <a href=""><a/> aparte de un http://url.com ignoraria toda la cadena por ejemplo si la cadena es

$texto1="aquí debe haber una url <a href='http://algo.com'>algo</a><br> aquí debe haber una url http://www.algo.com";

function busca_url($_valor='')
{
if (!eregi("<a",$_valor)){
$_remplazado = preg_replace("/(http://S+)|( ftp://S+)/i ","<a href='\01\02'>\01\02</a>\n",$_valor);
$_remplazado = preg_replace("/(w+@S+)/i","<a href='mailto:\01'>\01</a>\n",$_remplazado);
return $_remplazado;
} else {
return $_valor;
}
}

A decir verdad veo algo complicado este problema pero ahora no importa como hay ke resolverlo ^^(lo digo por mi y los que me kieran ayudar jeje) de todos modos te doy las gracias por ayudar ^^ creo que es posible yo cree una solucion pero por alguna razon aunque es funcional se come el espacio/caracter anterior a la cadena remplazada y si no hay nada antes simplemente la ignora ¿por que? no tengo la menor idea pero si te interesa esta es la solucion:

<?
function busca_url($_valor='')
{
$_remplazado = preg_replace("/[^\'\"\=](http:\/\/\S+)|(ftp:\/\/\S+)/i "," <a href='\\01\\02'>\\01\\02</a> ",$_valor);
$_remplazado = preg_replace("/[^\'\"=\S+](\w+@\S+)/i"," <a href='mailto:\\01'>\\01</a> ",$_remplazado);

return $_remplazado;
}
echo busca_url('aqui deve haver una url <a href=http://algo.com>http://algo.com</a> <br> webmaster: <a href="mailto:[email protected]">[email protected]</a>');
echo busca_url('<br>aqui deve haber una url http://nxtch-template.webcindario.com webmaster: [email protected]<br>');
echo busca_url('http://lola.com <br> <a href=lola.com>lola.com<a>');
echo "<br><br>";

?>
wow esto me esta costando muchas aspirinas y muchos cigarros asi que devo resolverlo pronto jejeje
  #6 (permalink)  
Antiguo 16/10/2003, 23:55
Avatar de cvander
Moderador
 
Fecha de Ingreso: abril-2001
Ubicación: Ciudadano del mundo
Mensajes: 13.638
Antigüedad: 23 años
Puntos: 1792
Este código creo que es el que buscas:

Código PHP:
$txt preg_replace"/(?<!<a href=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/i""<a href=\"\\0\">\\0</a>"$txt ); 
__________________
- Christian Van Der Henst
Platzi
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:26.