2012-03-17 12 views
6

estoy solicitando el código fuente de una página web como esta:Hacer enlaces relativos a las absolutas

<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 
echo $txt; ?> 

Bu Me gustaría sustituir los enlaces relativos con los absolutos! Básicamente,

<img src="/images/legend_15s.png"/> and <img src='/images/legend_15s.png'/> 

debe sustituirse por

<img src="http://domain.com/images/legend_15s.png"/> 

y

<img src='http://domain.com/images/legend_15s.png'/> 

respectivamente. ¿Cómo puedo hacer esto?

Respuesta

7

Este código sólo reemplaza los enlaces e imágenes:

<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 
$txt = str_replace(array('href="', 'src="'), array('href="http://stats.pingdom.com/', 'src="http://stats.pingdom.com/'), $txt); 
echo $txt; ?> 

he probado y su trabajo :)

ACTUALIZADO

Aquí se hace con la expresión regular y trabajar mejor:

<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 
$domain = "http://stats.pingdom.com"; 
$txt = preg_replace("/(href|src)\=\"([^(http)])(\/)?/", "$1=\"$domain$2", $txt); 
echo $txt; ?> 

Hecho : D

9

Esto se puede lograr con lo siguiente:

<?php 
$input = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 

$domain = 'http://stats.pingdom.com/'; 
$rep['/href="(?!https?:\/\/)(?!data:)(?!#)/'] = 'href="'.$domain; 
$rep['/src="(?!https?:\/\/)(?!data:)(?!#)/'] = 'src="'.$domain; 
$rep['/@import[\n+\s+]"\//'] = '@import "'.$domain; 
$rep['/@import[\n+\s+]"\./'] = '@import "'.$domain; 
$output = preg_replace(
    array_keys($rep), 
    array_values($rep), 
    $input 
); 

echo $output; 
?> 

Qué hará enlaces de salida de la siguiente manera:

/algo

se convertirá,

http://stats.pingdom.com//something

Y

../something

se convertirá,

http://stats.pingdom.com/../something

Pero no va a modificar "de datos: image/pn gramo;" o etiquetas de anclaje

Estoy bastante seguro de que las expresiones regulares se pueden mejorar.

+0

¡Me encanta! Gracias por escribirlo. Inteligente para poner los parámetros preg_replace en las teclas. Implementé esto para cumplir con una solicitud de función de usuario para establecer enlaces absolutos en mi complemento que genera copias estáticas de los sitios web de Grav. Dicho esto, si alguien encuentra un problema con él, trataré de informar sobre esto para que los futuros usuarios tengan una mejor copia. – BarryMode

1

usted no necesita php, sólo tiene que utilizar la etiqueta de base html5, y poner su código php en el cuerpo HTML, solo tiene que hacer lo siguiente Ejemplo:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
    <base href="http://yourdomain.com/"> 
</head> 
<body> 
<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741'); 
echo $txt; ?> 
</body> 
</html> 

y todos los archivos use la url absoluta

Cuestiones relacionadas