- PHP str_replace для изменения путей ссылок
- Замена внешних ссылок на внутренние на PHP
- Замена внешних ссылок с исключением
- PHP функция замены прямых ссылок на JS с подтверждением перехода.
- Сначала пишем PHP функцию замены прямых внешних ссылок:
- Замена внешних ссылок на внутренние или как спрятать ссылку (Часть 2)
- Теперь мы знаем что искать.
- Собираем регулярку
- Разберем по порядку (
- Регулярное выражение для поиска активных ссылок.
- Код
- Замена текста ссылки
PHP str_replace для изменения путей ссылок
file_get_contents возвращает строку, содержащую содержимое файла.
Таким образом, вы можете работать в этой строке, используя любую функцию строковой манипуляции, которую вы хотите, например, те, о которых вы говорили.
Что-то вроде этого, используя str_replace, вероятно, сделает:
$content = file_get_contents('http://www.google.com'); $new_content = str_replace('
Но обратите внимание, что это заменит URL-адрес в атрибуте href если этот атрибут является первым из
Использование регулярного выражения может помочь вам немного больше; но, вероятно, это тоже не будет идеально, боюсь …
Если вы работаете с HTML-документом и хотите «полное» решение, использование DOMDocument::loadHTML и работа с методами манипуляции с DOM может быть другим (более сложным, но, возможно, более мощным) решением.
Ответы на эти два вопроса также могут помочь вам в зависимости от того, что вы готовы сделать:
EDIT после просмотра комментария:
Если вы хотите заменить две строки, вы можете передать массивы двум первым параметрам str_replace . Например :
$new_content = str_replace( array('
Если поиск и замена являются массивами, то str_replace () принимает значение из каждого массива и использует их для поиска и замены объекта. Если замена имеет меньше значений, чем поиск, то для остальных значений замены используется пустая строка. Если поиск – это массив, а replace – строка, то эта строка замены используется для каждого значения поиска.
$text = file_get_contents('some_file'); $text = str_replace('
$new_content = preg_replace('!(]*)href="([^"]+)"!','\1 href="site.php?url=\2"', $content);
Я думаю, что это должно сделать трюк:
Если вы хотите использовать удаленный документ на своем веб-сайте, но сохраните ссылки этого документа в целости, лучше используйте элемент BASE для объявления базового URI:
Подобно коду, отправленному bisko, но, независимо от того, заключает ли он «,» или ничего в href
$text = 'Europanet Webjump Euforia'; $text = preg_replace('|(]*href=[\'"]?)|','\1site.php?url=', $text);
Замена внешних ссылок на внутренние на PHP
В этой статье мы рассмотрим пример автоматического заменителя внешних ссылок на внутренние, написанном на PHP.
Данная система состоит из 2 частей.
1. Непосредственно сам заменитель, который пропускает HTML код текста через, так сказать фильтр, где все внешние ссылки заменяются на внутренние.
Первые две строки данного кода это правило "что искать" ($fin) и "на что менять" ($replace), для удобности изменения данные строки с переменными вы можете прописать в файл который загружается всегда, например, config.php.
$fin содержит регулярное выражение, по которому находятся внешние ссылки.
$replace это то на что заменяется найденный пременной $fin кусок ссылки. Как видно из примера, всем внешним ссылкам будет присвоен класс outurl и внешние ссылки будут открываться в новом окне.
Последняя, третья строка является тем самым "фильтром" о котором говорилось ранее, именно он и заменяет все внешние ссылки в переменной $mytext на внутренние.
2. Переадресатор, который ловит нашу внутреннюю ссылку и отправляет пользователя по адресу бывшей внешней ссылки.
Наш переадресатор в данном случае, это engine.php, который содержит следующий PHP код:
if($_GET['url'])
$url = $_GET['url']; //
if (!$url)
$url = "http://вашдомен.ру";
>
if (!preg_match('#(https?|ftp)://\S+[^\s.,>)\];\'\"!?]#i',$url))
exit ("
Неверный формат запроса! Проверьте URL!
");
>
header("Location:$url");
exit();
>
Как и говорилось выше, вся задача данного файла в том чтобы перенаправить пользователя на конечный адрес.
Замена внешних ссылок с исключением
Способ в пункте 1 выше использовать можно, но лучше использовать его доработанную версию. Которая ниже. Дело в том что код представленный в пункте 1 также работает если ссылка внутренняя, но была написана в абсолютном виде.
Вот собственно изменённый первый пункт:
$mytext=preg_replace('~(.*?href))=(["\'])([a-z0-9]++://(?![a-z0-9\.]*?site\.ru).*?)\2~eSi', '"\1=\"http://site.ru/redirect.php?url=".base64_encode("$3")."\" target=\"_blank\"";', $mytext);
Это более крутой заменитель, который не просто подставляет в переменную внутреннего адреса внешний адрес, а дополнительно кодирует её в base64.
Для того чтобы система с этим заменителем работала исправно, тогда во втором пункте, в нашем переадресаторе замените:
Если же вы не желаете кодировать адрес внешней ссылки, просто замените ".base64_encode("$3")." (ИМЕННО С КАВЫЧКАМИ) на $3.
И чуть не забыл. Как вы наверное уже догадались site надо заменить на ваш сайт. Это и будет исключением, которое заменитель будет обходить.
Если у вас возникли какие-либо вопросы по данной теме, пишите в комментариях.
You have no rights to post comments
PHP функция замены прямых ссылок на JS с подтверждением перехода.
При публикации контента на сайте часто требуется чтобы прямые ссылки в тексте заменялись на javascript конструкции, осуществляющие переход по внешней ссылке с предупреждением и подтверждением о таком действии. Такая необходимость обычно появляется при запуске комментариев на сайте, где пользователи естественно будут выкладывать ссылки на сторонние ресурсы в качестве подтверждающих источников или по любой другой мотивации. Можно просто отфильтровать ссылки удалением тегов через функцию strip_tags( $html ) . Такие методы скорее всего сильно ограничат возможности пользователей по комментированию, а часть из них просто откажется поддерживать диалог. Но и благотворительность, в форме раздачи бесплатных прямых ссылок, крайне расточительна и даже опасна - спамеры, как пить дать, в два счёта сделают линкопомойку. Исходя из пожеланий - дать возможность пользователям ставить ссылки на внешние ресурсы и не отдавать за красивые слова репутацию сайта, появилась задача из следующих составляющих:
Сначала пишем PHP функцию замены прямых внешних ссылок:
function replace_links($html) < //удаляем все лишние атрибуты оставляя только href и анкор. $html = preg_replace('/]*href=(["'])(.*?)1[^>]*>(.*?)/i', '$3', $html); // Ищем все ссылки в HTML preg_match_all('/(.*?)/i', $html, $matches, PREG_SET_ORDER); // Обрабатываем каждую найденную ссылку foreach ($matches as $match) < $url = $match[1]; $anchor = $match[2]; // Заменяем ссылку на новый код $replacement = "$anchor"; $html = str_replace($match[0], $replacement, $html); > return $html; >
JS код подтверждения перехода по ссылке с применением SweetAlert.
//Подключаем библиотеку sweetalert //Подключаем стили sweetalert
ПАМЯТКА! Обязательно скачивайте только проверенный дистрибутив библиотеки SweetAlert . Замечено заражение файлов политической рекламой. Или можете скачать эту рабочую версию.
/* Стили внешних ссылок */ .goRelink < color: blue; cursor: pointer; border-bottom: 1px dashed blue; >.goRelink:hover
Замена внешних ссылок на внутренние или как спрятать ссылку (Часть 2)
Для начала надо определиться, что будем искать с помощью регулярки. А искать будем все активные ссылки начинающиеся на HTTP:// , HTTPS:// или FTP:// . Полезные функции на PHP - активная ссылка, по которой можно кликнуть. Теперь давайте разберем из чего состоит html код такой ссылки.
Теперь мы знаем что искать.
Собираем регулярку
Разберем по порядку ( Затем ищем href display: block; margin-left: auto; margin-right: auto;" title="Вторая часть регулярки" src="http://www.makannikov.ru/userfiles/images/posts/a6d1fb35d80043ac614da4629e50ee38.jpg" alt="Вторая часть регулярки" width="500" height="121"/>
А после нужно указать, что протокол может быть: либо HTTP либо HTTPS либо FTP.

Здесь тоже все просто, указываем в скобках (https | ftp). символ | - означает "либо", тоесть либо https либо ftp . А после буквы s (http S ) ставим знак вопроса - это скажет о том, что буква S может быть 1 раз, или её может совсем не быть. А после протокола ставим ://
Регулярное выражение для поиска активных ссылок.

Код
Объясняю что означает $1,$2 и $3 - это группы, для обозначения групп в регулярке, мы использовали круглые скобочки.
Замена текста ссылки

Замена текста (ссылки) в HTML коде
Здравствуйте форумчане! Не могу реализовать вот такую беду. Прошу помощи. Есть готовый Html.

Поиск части текста в диапазоне ячеек и замена этого текста на найденное соответсвие
Имеется список адресов, которым нужно присвоить в отдельной ячейке название микрорайона. Есть.
Шифрование текста, табличная замена текста
Один из простейших способов шифровки текста состоит в табличной замене каждого символа другим.
замена ссылки
Помогите пожалуйста разобраться делаю парсер фильмов на сайте ссылка на фильм выводится в таком.

Точная замена ссылки
есть такая проблема есть сыдка в переменной $l есть html код в $buf заменяю все слки равные $l в.
Замена ссылки на кнопку
У меня в коде используется ссылка для удаления записи из бд, как ее переделать в submit? Сделать.
.htaccess замена ссылки
Что я делаю не так пытаюсь заменить ссылку /index.php?page=1 на /page1 RewriteRule.
Замена названия ссылки
Добрый день!Помогите пожалуйста! есть вот такой код $key = '#(?<!\])\b$key//+#i'; $arResult =.
Замена текст в [url] на ссылки
Часто встречаю при вставке ссылки теги . Как обычно реализуют это? Например при простом вводе.
Здравствуйте форумчане! Не могу реализовать вот такую беду. Прошу помощи. Есть готовый Html.
Имеется список адресов, которым нужно присвоить в отдельной ячейке название микрорайона. Есть.
Один из простейших способов шифровки текста состоит в табличной замене каждого символа другим.
Помогите пожалуйста разобраться делаю парсер фильмов на сайте ссылка на фильм выводится в таком.
есть такая проблема есть сыдка в переменной $l есть html код в $buf заменяю все слки равные $l в.
У меня в коде используется ссылка для удаления записи из бд, как ее переделать в submit? Сделать.
Что я делаю не так пытаюсь заменить ссылку /index.php?page=1 на /page1 RewriteRule.
Добрый день!Помогите пожалуйста! есть вот такой код $key = '#(?<!\])\b$key//+#i'; $arResult =.
Часто встречаю при вставке ссылки теги . Как обычно реализуют это? Например при простом вводе.