2013-10-04 3 views
1

Мне нужно заменить url на странице, сделанной curl, и добавить правильную ссылку на изображения и ссылки. Мой PHP код завиток:preg_replace change link from href

<?php 

$result = '<a href="http://host.org"><img src="./sec.png"></a> 
<link href="./styles.css" rel="alternate stylesheet" type="text/css" /> 
<script type="text/javascript" src="./style.js"></script>'; 

echo $result; 
if (!preg_match('/src="https?:\/\/"/', $result)) { 
     $result = preg_replace('/src="(http:\/\/([^\/]+)\/)?([^"]+)"/', "src=\"http://google.com/\\3\"", $result); 
    } 
echo $result; 
if (!preg_match('/href="https?:\/\/"/', $result)) { 
     $result = preg_replace('/href="(http:\/\/([^\/]+)\/)?([^"]+)"/', "href=\"http://google.com/\\3\"", $result); 
    } 
echo $result; 

?> 

Выход:

//original links 
<a href="http://host.org"><img src="./sec.png"></a> 
<link href="./styles.css" type="text/css" /> 
<script src="./style.js"></script><br /> 

//fixed SRC path 
<a href="http://host.org"><img src="http://google.com/./sec.png"></a> 
<link href="./styles.css" type="text/css" /> 
<script src="http://google.com/./style.js"></script> 

//fixed HREF path 
<a href="http://google.com//google.com/./sec.png"></a> 
<link href="http://google.com/./styles.css" type="text/css" /> 
<script src="http://google.com/./style.js"></script> 

Но когда связь «а» это вырезать все ссылки и оставили только HREF значение.

//from 
<a href="http://host.org"><img src="./sec.png"></a> 
//to src fix: 
<a href="http://host.org"><img src="http://google.com/./sec.png"></a> 
//ERRRROR when href fix make : 
<a href="http://google.com//google.com/.sec.png"></a> 

Может ли любой орган помочь в его устранении. Спасибо

ответ

4

Удалить эту ненужную часть из ваших регулярных выражений: ([^ /] +)/

Это вызывает ваши регулярные выражения, чтобы соответствовать всему пути к URL в следующей метке.

Код:

$result = preg_replace('/src="(http:\/\/)?([^"]+)"/', "src=\"http://google.com/\\2\"", $result); 
$result = preg_replace('/href="(http:\/\/)?([^"]+)"/', "href=\"http://google.com/\\2\"", $result); 

Результат:

<a href="http://google.com/host.org"><img src="http://google.com/./sec.png"></a> 
<link href="http://google.com/./styles.css" rel="alternate stylesheet" type="text/css" /> 
<script type="text/javascript" src="http://google.com/./style.js"></script> 

Но! Я думаю, что вы действительно хотите, чтобы заменить относительные URL-адреса с абсолютными URL-адресами. Для этого вы можете использовать эти регулярному_выражению (с этим вы можете пропустить if-чеки):

$result = preg_replace('/src="(?!http:\/\/)([^"]+)"/', "src=\"http://google.com/\\1\"", $result); 
$result = preg_replace('/href="(?!http:\/\/)([^"]+)"/', "href=\"http://google.com/\\1\"", $result); 
+0

Спасибо !!!!!! – Eugenia