Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Poner enlaces php con expresiones regulares y con títulos de forma automática

Estas en el tema de Poner enlaces php con expresiones regulares y con títulos de forma automática en el foro de PHP en Foros del Web. He visto que algunos foros, te ponen enlaces con expresiones regulares y además te ponen en el anchor del enlace el título del la página ...
  #1 (permalink)  
Antiguo 12/04/2014, 12:42
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Poner enlaces php con expresiones regulares y con títulos de forma automática

He visto que algunos foros, te ponen enlaces con expresiones regulares y además te ponen en el anchor del enlace el título del la página del enlace, otros simplemente repiten en el anchor el mismo enlace.

Como se puede aunar las dos cosas sacar los títulos de los enlaces y con expresiones regulares hacer las urls.



Código PHP:

// Sacar las Urls

function extraerURLs($cadena){


   
$regex '/https?\:\/\/[^\" ]+/i';
    
preg_match_all($regex$cadena$partes);
    return (
$partes[0]);
}

$cadena'uuuihhjnn  http:// dominio.com  blba  aaaaa http:// bollos.com  jkm

dkddjfkfnkfsmfpier   http:// alonso.net   jijahdhne'

$urls extraerURLs($cadena);



//Sacar los títulos de los enlaces
     
    
function extraer_title($filtro) {
     
    
$param "|<[s]*title[s]*>([^<]+)<[s]*/[s]*title[s]*>|Ui";
     
    if( 
preg_match($param$filtro$result) ) {
     
                   return 
$result[1];
     
    }else{
     
                   return 
false;
     
    }
     
    }
     
    
$url$urls;
     
    
$recorrer file_get_contents($url);
     
    
$title extraer_title($recorrer);
     
    ****

// hacer la expresión regular para hacer los enlaces

$texto=preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[A-Z0-9+&@#\/%=~_|]/i''<a href="\0" target=_blank>\0</a>'$cadena
Como puedo meter el título extraido con file_get_contents en la expresión regular, dentro de un texto.

O si ya hay un script hecho que lo hace todo a la vez detecta los enlaces y les añade los títulos en el anchor.
  #2 (permalink)  
Antiguo 12/04/2014, 17:21
Avatar de 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.
  #3 (permalink)  
Antiguo 13/04/2014, 11:26
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Poner enlaces php con expresiones regulares y con títulos de forma automát

Gracias funciona. Pero sale esto decenas de veces.

Código:
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Unexpected end tag : a in Entity,

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID post11384031 already defined in Entity, line: 104 in
  #4 (permalink)  
Antiguo 13/04/2014, 11:33
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Poner enlaces php con expresiones regulares y con títulos de forma automát

Lo he solucionado con esto

Código:
$doc = new DOMDocument();
	libxml_use_internal_errors(true); 
	$doc->loadHTML($html);
    libxml_use_internal_errors(false);
  #5 (permalink)  
Antiguo 14/04/2014, 02:36
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Poner enlaces php con expresiones regulares y con títulos de forma automát

Hay un problema con las urls que tiene un espacio vacío dentro de ellas.

Última edición por jordi45; 14/04/2014 a las 02:48

Etiquetas: enlaces, expresiones, forma, regulares
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 20:17.