Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/06/2014, 13:11
dariocena02
 
Fecha de Ingreso: febrero-2012
Mensajes: 23
Antigüedad: 12 años, 3 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