PHP функция замены прямых ссылок на JS с подтверждением перехода.

Содержание:

  1. Описание идеи замены прямых ссылок в тексте страницы.
  2. PHP функция замены прямых внешних ссылок
  3. JS код подтверждения перехода ро ссылке с применением SweetAlert.
  4. Стилизация конструкции перехода под привычную ссылку
  5. DEMO

При публикации контента на сайте часто требуется чтобы прямые ссылки в тексте заменялись на javascript конструкции, осуществляющие переход по внешней ссылке с предупреждением и подтверждением о таком действии. Такая необходимость обычно появляется при запуске комментариев на сайте, где пользователи естественно будут выкладывать ссылки на сторонние ресурсы в качестве подтверждающих источников или по любой другой мотивации. Можно просто отфильтровать ссылки удалением тегов  через функцию strip_tags($html). Такие методы скорее всего сильно ограничат возможности пользователей по комментированию, а часть из них просто откажется поддерживать диалог. Но и благотворительность, в форме раздачи бесплатных прямых ссылок, крайне расточительна и даже опасна - спамеры, как пить дать, в два счёта сделают линкопомойку. Исходя из пожеланий - дать возможность пользователям ставить ссылки на внешние ресурсы и не отдавать за красивые слова репутацию сайта, появилась задача из следующих составляющих:

  1. Заменить ссылки на строковой тег span и aнкор  при клике на который осуществиться программный переход на внешний ресурс.
  2. Перед переходом на внешний ресурс будет выведено диалоговое окно для подтверждения или отказа перехода.
  3. Новая конструкция должна иметь стилистику обычных ссылок.

Сначала пишем PHP функцию замены прямых внешних ссылок:

PHP
function replace_links($html) {
        //удаляем все лишние атрибуты оставляя только href и анкор.
        $html = preg_replace('/<as+[^>]*href=(["'])(.*?)1[^>]*>(.*?)</a>/i', '<a href="$2">$3</a>', $html);
        // Ищем все ссылки в HTML
        preg_match_all('/<as+href=['"]([^'"]+)['"]s*>(.*?)</a>/i', $html, $matches, PREG_SET_ORDER);
        // Обрабатываем каждую найденную ссылку
        foreach ($matches as $match) {
           $url = $match[1];
           $anchor = $match[2];
           // Заменяем ссылку на новый код
           $replacement = "<span class="goRelink" onclick="goRelink('$url')">$anchor</span>";
           $html = str_replace($match[0], $replacement, $html);
         }
        return $html;
    }

Предварительно удаляем все лишние атрибуты у ссылок, оставив только href и анкоры. Потом находим все ссылки и в цикле меняем их на конструкцию строкового тега span и aнкора при клике на котором вызывается javascript функция goRelink('$url') с данными URL адреса перехода.

JS код подтверждения перехода по ссылке с применением SweetAlert.

Для вызова окна подтверждения перехода можно использовать библиотеку SweetAlert - она позволяет создавать красивые и динамичные всплывающие окна интерактивных сообщений.

JS
//Подключаем библиотеку sweetalert
<script src="lib/sweetalert/sweetalert2.all.min.js"></script>
//Подключаем стили sweetalert
<link rel='stylesheet' href='lib/sweetalert/sweetalert2.min.css' />

<script type="text/javascript">
function goRelink(url){
    Swal.fire({//вызываем sweetalert окно
      imageUrl: './img/exclamation_mark_a-90.gif', //иконка предупреждения
      imageHeight: 90,
    imageAlt: 'Внимание!',
    title: 'Вы переходите по внешней ссылке!',
    showDenyButton: true,
    showCancelButton: true,
    confirmButtonText: 'Перейти',
    cancelButtonText:'Не переходить',
     }).then((result) => {
       if (result.isConfirmed) {
         window.open(url, '_blank'); //осуществляем переход с новой вкладкой
        Swal.fire('До свидания!', '', 'success')
       } else if (result.dismiss === Swal.DismissReason.cancel) {
         Swal.fire({
            icon: 'info',
            title: 'Переход отменён!',
            showConfirmButton: false,
            timer: 1500
          })
       }
     })
}
</script>

ПАМЯТКА! Обязательно скачивайте только проверенный дистрибутив библиотеки SweetAlert. Замечено заражение файлов политической рекламой. Или можете скачать эту рабочую версию.

Осталось только немного стилизировать новую конструкцию.

CSS
/* Стили внешних ссылок */
.goRelink{
    color: blue;
    cursor: pointer;
    border-bottom: 1px dashed blue;
}
.goRelink:hover{
    color: red;
    border-bottom: 1px dashed red;
}

Дата публикации: 

ТОП 10 случайных публикаций



Сайт разработан студией © WEB-VidST   


Яндекс.Метрика