Foros del Web » Programando para Internet » PHP »

Formatear enlaces de un string

Estas en el tema de Formatear enlaces de un string en el foro de PHP en Foros del Web. Hola, Estoy trabajando en un código pero no consigo encontrar la solución. En mi base de datos tengo unos cuantos textos y quiero conseguir lo ...
  #1 (permalink)  
Antiguo 16/06/2014, 13:11
 
Fecha de Ingreso: febrero-2012
Mensajes: 23
Antigüedad: 12 años, 2 meses
Puntos: 0
Formatear enlaces de un string

Hola,

Estoy trabajando en un código pero no consigo encontrar la solución.
En mi base de datos tengo unos cuantos textos y quiero conseguir lo siguiente:

- Todo los enlaces que empiecen por http:// tienen que ser sustuidos por otro código
- Los enlaces que NO inician por per http:// o www tienen que quedarse igual.

He avanzado parte del código pero tengo probemas:

Esto es un texto (string) de ejemplo:
Código:
<p><a href="http://php.net/manual/fr/function.count.php" target="_blank" class="livepreview"></a><a href="http://www.prova.com" target="_blank" class="livepreview">www.prova.com</a>&nbsp;<a href="http://php.net/manual/fr/function.count.php" target="_blank" class="livepreview">http://php.net/manual/fr/function.count.php</a>&nbsp;</p>
Este es mi código:
Código:
$textoentr=$rowtexto['texto'];

$hrefs = array();
$dom = new DOMDocument();
$dom->loadHTML($textoentr);
$tags = $dom->getElementsByTagName('a');
foreach ($tags as $tag) {  $hrefs[] =  $tag->getAttribute('href');  }  

$retnuml=substr_count($textoentr, "href");
$retnuml=$retnuml-1;

$textofinapp = strip_tags($textoentr,'<p><strong><em><br/><br><span><img>');

 for ($i = 0; $i <= $retnuml; $i++) {
$linkapp = '<a onClick="parent.postMessage(' . "'$hrefs[$i]'" . ', ' . "'*'" . '); " style="color:#f69100;">'.$hrefs[$i].'</a>';
$textofinapp = str_replace($hrefs[$i],$linkapp, $textofinapp);
}
Explico el codigo...

- Antes de nada saco el string de mi base de datos.

- Luego creo un array() con cada uno de los enlaces que tiene el string, estos vienen almacenados en los diferentes $hrefs[0], $hrefs[1], $hrefs[2], etc...

- Luego cuento con "substr_count" cuantos href tengo, para crear un ciclo for.

- Elimino todos los tags <a> de mi string

- Uso for y sustituyo en el texto cada coincidencia del array con el nuevo enlace completo ($linkapp)


Tengo 2 problema:
- No quiero que este script funcione sobre los enlaces que no empiecen por http:// o www. Quiero decir, los link internos.
- Con la función:
Código:
$textofinapp = str_replace($hrefs[$i],$linkapp, $textofinapp);
no se seleccionan las palabras que empiezan por www., solo selecciona las con http://.

Vaya lio, como puedo arreglar el código?!?!
Gracias
  #2 (permalink)  
Antiguo 16/06/2014, 13:31
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Formatear enlaces de un string

Cita:
- Todo los enlaces que empiecen por http:// tienen que ser sustuidos por otro código
- Los enlaces que NO inician por per http:// o www tienen que quedarse igual.
Hay varias formas pero esa descripcion es para el uso expresiones regulares, preg_replace() o preg_replace_callback() te serviran
__________________
Salu2!
  #3 (permalink)  
Antiguo 17/06/2014, 06:15
 
Fecha de Ingreso: febrero-2012
Mensajes: 23
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Formatear enlaces de un string

Hola Italico,

efectivamente con preg_replace() me funciona, usando la expresión regular adecuada.
Estaba usando str_replace y no conseguia arreglarlo.

Muchas gracias

Etiquetas: enlaces, formatear, html, string
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 11:50.