Я использую file_get_contents
для получения содержимого определенных файлов. Пока это работает. Но тогда я хотел бы искать файл и заменять все <a href="
на <a href="site.php?url=
перед показом файла. Как я могу это сделать? Я знаю, что я должен использовать какой-то str_replace
или даже preg_replace
. Но я не знаю, как на самом деле искать и делать это для файла, который я получаю с file_get_contents
.
file_get_contents
возвращает строку, содержащую содержимое файла.
Таким образом, вы можете работать в этой строке, используя любую функцию строковой манипуляции, которую вы хотите, например, те, о которых вы говорили.
Что-то вроде этого, используя str_replace, вероятно, сделает:
$content = file_get_contents('http://www.google.com'); $new_content = str_replace('<a href="', '<a href="site.php?url=', $content); echo $new_content;
Но обратите внимание, что это заменит URL-адрес в атрибуте href
если этот атрибут является первым из <a
…
Использование регулярного выражения может помочь вам немного больше; но, вероятно, это тоже не будет идеально, боюсь …
Если вы работаете с HTML-документом и хотите «полное» решение, использование DOMDocument::loadHTML
и работа с методами манипуляции с DOM может быть другим (более сложным, но, возможно, более мощным) решением.
Ответы на эти два вопроса также могут помочь вам в зависимости от того, что вы готовы сделать:
EDIT после просмотра комментария:
Если вы хотите заменить две строки, вы можете передать массивы двум первым параметрам str_replace
. Например :
$new_content = str_replace( array('<a href="', 'Pages'), array('<a href="site.php?url=', 'TEST'), $content);
При этом:
<a href="
' будет заменен на <a href="site.php?url=
' Pages
» будут заменены на « TEST
», И, цитируя руководство:
Если поиск и замена являются массивами, то str_replace () принимает значение из каждого массива и использует их для поиска и замены объекта. Если замена имеет меньше значений, чем поиск, то для остальных значений замены используется пустая строка. Если поиск – это массив, а replace – строка, то эта строка замены используется для каждого значения поиска.
Если вы хотите заменить все экземпляры ' <a href="
', ну, это то, что str_replace
делает по умолчанию 🙂
$text = file_get_contents('some_file'); $text = str_replace('<a href="', '<a href="site.php?url=', $text);
$new_content = preg_replace('!(<a\s*[^>]*)href="([^"]+)"!','\1 href="site.php?url=\2"', $content);
Я думаю, что это должно сделать трюк:
Если вы хотите использовать удаленный документ на своем веб-сайте, но сохраните ссылки этого документа в целости, лучше используйте элемент BASE
для объявления базового URI:
<base href="http://example.com/path/to/remote/document">
Подобно коду, отправленному bisko, но, независимо от того, заключает ли он «,» или ничего в href
$text = '<a href="http://www.europanet.com.br">Europanet</a> <a target="_blank" href=\'http://www.webjump.com.br\'>Webjump</a> <a id="link" href=http://www.euforia.com.br target="_top">Euforia</a>'; $text = preg_replace('|(<a\s*[^>]*href=[\'"]?)|','\1site.php?url=', $text);