PHP str_replace для изменения путей ссылки - PullRequest
0 голосов
/ 09 августа 2009

Я использую file_get_contents для получения содержимого определенных файлов. Пока это работает. Но тогда я бы хотел найти файл и заменить все <a href=" на <a href="site.php?url=, прежде чем показывать файл. Как я могу это сделать? Я знаю, что должен использовать какой-то str_replace или даже preg_replace. Но я не знаю, как на самом деле искать и делать это для файла, который я получаю с file_get_contents.

Ответы [ 5 ]

4 голосов
/ 09 августа 2009
$text = file_get_contents('some_file');
$text = str_replace('<a href="', '<a href="site.php?url=', $text);
2 голосов
/ 09 августа 2009

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 могут быть другим (немного более сложным, но, вероятно, более мощным) решением. .


Ответы на эти два вопроса также могут помочь вам, в зависимости от того, что вы готовы сделать:


РЕДАКТИРОВАТЬ после просмотра комментария:

Если вы хотите заменить две строки, вы можете передать массивы двум первым параметрам 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 () принимает значение из каждый массив и использует их для поиска и заменить на тему. Если заменить имеет меньше значений, чем поиск, то пустая строка используется для остальной части восстановительные значения. Если поиск массив и заменить это строка, то эта строка замены используется для каждое значение поиска.

Если вы хотите заменить все экземпляры '<a href="', это то, что str_replace делает по умолчанию: -)

1 голос
/ 09 августа 2009
$new_content = preg_replace('!(<a\s*[^>]*)href="([^"]+)"!','\1 href="site.php?url=\2"', $content);

Я думаю, что это должно сработать:

  • заменяет ссылку на ссылку, где бы она ни находилась
  • например. работает на
0 голосов
/ 09 августа 2009

Как и код, отправленный 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);
0 голосов
/ 09 августа 2009

Если вы хотите использовать удаленный документ на своем веб-сайте, но сохранить ссылки на этот документ без изменений, лучше используйте элемент BASE , чтобы объявить базовый URI:

<base href="http://example.com/path/to/remote/document">
...