Intereting Posts

PHP str_replace для изменения путей ссылок

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

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

  • underlinks также
  • file_get_contents – также получить фотографии

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); 

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

  • он заменяет href ссылки, независимо от того, где он находится
  • например, работает на <a href = "..", <a style = "" href = "…"

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