Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/04/2014, 17:21
Avatar de Cuervoo
Cuervoo
 
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 6 meses
Puntos: 43
Respuesta: Poner enlaces php con expresiones regulares y con títulos de forma automát

Yo no la enroscaría con una expresión regular, podés usar la clase DOMDocument
Código PHP:
Ver original
  1. function extraer_title($url)
  2. {
  3.     if (!$html = file_get_contents($url))
  4.     {
  5.         return false;
  6.     }
  7.  
  8.     $doc = new DOMDocument();
  9.     $doc->loadHTML($html);
  10.     $title = $doc->getElementsByTagName('title');
  11.    
  12.     if ($title->length)
  13.     {
  14.         return $title->item(0)->textContent;
  15.     }
  16.    
  17.     return false;
  18. }

Revisá la función extraerURLs() porque no está bien, en Google vas a encontrar muchos ejemplos de expresiones regulares para extraer todas las urls de una cadena.

Y lo implementás así:
Código PHP:
Ver original
  1. // Suponiendo que devuelve un array con todas las urls
  2. $urls = extraerURLs($cadena);
  3. //Acá vamos a guardar los links
  4. // Índice: la url
  5. // Valor: la etiqueta del link
  6. $replaces = array();
  7. // Recorre
  8. foreach($urls as $u)
  9. {
  10.     $title = extraer_title($u);
  11.     // Si devolvió false ponemos como texto la misma url,
  12.     // sino ponemos el title
  13.     if (!$title)
  14.     {
  15.         $replaces[$u] = '<a href="'.$u.'">'.$u.'</a>';
  16.     }
  17.     else
  18.     {
  19.         $replaces[$u] = '<a href="'.$u.'">'.$title.'</a>';
  20.     }
  21. }
  22.  
  23. // Y solamente queda remplazarlo
  24. $texto = str_replace(
  25.     array_keys($replaces),
  26.     array_values($replaces),
  27.     $cadena
  28. );

No está probado pero debería funcionar, me parece más entendible que andar peleando con las expresiones regulares que en este caso no tienen mucho sentido.