Ho bisogno di sostituire gli URL nella pagina presa da arricciatura e aggiungere il link corretto a immagini e collegamenti. Il mio codice di 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; ?>
L'output è:
//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>
Ma quando il link è "a" taglia tutto il link e lascia solo il valore 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>
Qualsiasi organismo può aiutarti a risolverlo. Grazie
Rimuovi questa parte non necessaria dalle tue espressioni regolari: ([^ /] +) /
Fa sì che le tue espressioni regolari corrispondano fino all'URL nel tag successivo.
Codice:
$result = preg_replace('/src="(http:\/\/)?([^"]+)"/', "src=\"http://google.com/\\2\"", $result); $result = preg_replace('/href="(http:\/\/)?([^"]+)"/', "href=\"http://google.com/\\2\"", $result);
Risultato:
<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>
Ma! Penso che quello che vuoi veramente sia un modo per sostituire gli url relativi con URL assoluti. Per questo è ansible utilizzare queste espressioni regolari (con questo è ansible saltare gli if-checks):
$result = preg_replace('/src="(?!http:\/\/)([^"]+)"/', "src=\"http://google.com/\\1\"", $result); $result = preg_replace('/href="(?!http:\/\/)([^"]+)"/', "href=\"http://google.com/\\1\"", $result);