Мне нужно заменить URL-адреса на странице, сделанной curl, и добавить правильную ссылку на изображения и ссылки. Мой php curl-код:
<?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://img.ruphp.com/php/sec.png"></a> <link href="./styles.css" type="text/css" /> <script src="http://google.com/./style.js"></script> //fixed HREF path <a href="http://img.ruphp.com/php/sec.png"></a> <link href="http://google.com/./styles.css" type="text/css" /> <script src="http://google.com/./style.js"></script>
Но когда ссылка «a», она разрезает всю ссылку и оставляет только значение href.
//from <a href="http://host.org"><img src="./sec.png"></a> //to src fix: <a href="http://host.org"><img src="http://img.ruphp.com/php/sec.png"></a> //ERRRROR when href fix make : <a href="http://google.com//google.com/.sec.png"></a>
Может ли любой орган помочь в его устранении. спасибо
Удалите эту ненужную часть из ваших регулярных выражений: ([^ /] +) /
Это приводит к тому, что ваши регулярные выражения соответствуют всему 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://img.ruphp.com/php/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-check):
$result = preg_replace('/src="(?!http:\/\/)([^"]+)"/', "src=\"http://google.com/\\1\"", $result); $result = preg_replace('/href="(?!http:\/\/)([^"]+)"/', "href=\"http://google.com/\\1\"", $result);