Четверг, 2025-01-23, 6:25 AM
Статьи - PHP
Приветствую Вас Гость | RSS
Главная страница Каталог статей Регистрация Вход
Меню сайта

Категории каталога
PHP [158]
Статьи по PHP

Наш опрос
Какой раздел нужно пополнить (создать) ?
Всего ответов: 100

Начало » Статьи » PHP » PHP

PHP: Подсветка текста на странице
Каким образом можно сделать подсветку текста на странице?

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

Подсвечивать текст можно (самое простое) фоном. Напримёр, жёлтым. Сразу заметно, очень удобно. Ещё можно подчёркиванием, например таким. В общем, вариантов много. Я предлагаю не ограничивать вебмастера и просто необходимый текст заключать в блок:

<span class="highlight"> тут подсвеченный текст </span>
Стиль класса определяйте как хотите. Я, например, сделал так:

.highlight { background-color: yellow;}
Теперь о том, откуда мы будем узнавать, какие слова подсвечивать: это очень просто — мы будем передавать GET-запросом параметр highlight, равный подсвечиваемому тексту. Таким образом URL страницы станет таким:

http://www.site.ru/page.php?a=1&b=2&highlight=%E4%F3%F0%E0%EA
И мы легко сможем взять значение этой переменной из суперглобального массива $_GET. Ну, чтобы было удобнее разработчикам, разрешим также передавать параметр highlight методом POST и будем его брать из массива $_REQUEST.

Теперь о том, как же мы будем это делать. Для того, чтобы выделить необходимый текст на странице, нам нужно получить весь текст страницы. Для этого мы будем использовать функции контроля за выводом (а именно ob_start).

В самом начале Вашего PHP-скрипта, который занимается выводом страниц вставляется следующий код:

<? if (isset($_REQUEST['highlight'])) ob_start('highlighter');... // здесь идёт код страницы
Мы запускаем контроль за выводом и указываем, что обработкой всех выведенных данных будет заниматься функция highlighter. Теперь нужно определить и саму функцию highlighter. Простейший вариант выглядел бы так:

function highlighter ($data) { $t=explode(' ', $_REQUEST['highlight']); // получаем массив слов, которые нужно подсвечивать foreach($t as $i) $data=preg_replace('#' . $i . '#i', '<span class="highlight">$0</span>', $data); return $data;}
Увы, он содержит один очень важный недостаток: достаточно в параметре highlight передать имя любого тега (например, p, a или body) и всё сломается — он окружит теги <span>-ами. То же самое произойдёт и со значениями параметров тегов.

Единственный более-менее нормальный вариант, который я нашёл — сначала вырезать все теги вместе с атрибутами из страницы, а потом возвращать их на свои места. Таким образом функция highlighter изменяет свой вид на такой:

function highlighter ($data) { $t=explode(' ', $_REQUEST['highlight']); // получаем массив слов, которые нужно подсвечивать // Убираем из текста все теги в массив $tagList preg_match_all('#<[^>]*>#', $data, $tags); array_unique($tags); $tagList=array(); $k=0; foreach($tags[0] as $i) { $k++; $tagList[$k]=$i; $data=str_replace($i, '<' . $k . '>', $data); } // Производим обрамление текста <span>-ами foreach($t as $i) if (!is_numeric($i)) $data=preg_replace('#' . $i . '#i', '<span class="highlight">$0</span>', $data); // Возвращаем все теги на место foreach($tagList as $k=>$i) $data=str_replace('<' . $k . '>', $i, $data); // Убираем все подсветки внутри тегов <title> ... </title> $data=preg_replace_callback( '#<title>(.*?)<\/title>#', create_function( '$m', 'return preg_replace("#<span([^>]*)>#", "", str_replace("</span>", "", $m[0]));' ), $data ); return $data; // Возвращаем подсвеченный текст}
Вот так мы и решили проблему с подсветкой слов. Метод, конечно, не идеален, но очень хорош.

Хочу заметить: по-умолчанию при поиске кодировка не учитывается. То есть если у Вас сайт в windows-1251 и данные для подсветки пришли в ней же, то всё будет отлично. Но если Ваш сайт в иной кодировке, или если данные приходят в неправильной кодировке, то ничего подсвечено не будет.

Например, у меня сайт в UTF-8, а все данные от параметра highlight приходят в windows-1251 — скрипт их сначала перекодирует в UTF, а уже потом делает подсветку.

У себя на сайте я эту штуку тоже прикрутил. Вот посмотрите.

Подсветка и W3Search
Мой поисковик начиная с версии 1.03 в результатах указывает параметр highlight в котором передаёт текст запроса. Стоит Вам только прикрутить на сайт подсветку и всё это заработает

Категория: PHP | Добавил: webmaster (2006-12-02)
Просмотров: 304 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Сервисы

Поиск по каталогу

Друзья сайта

| Ссылки 1 | Ссылки 2 | Ссылки 3 |
www.webmaster.clan.su Каталог+поисковая система be number one Bakililar.az Top Sites Сервис авто регистрации в
каталогах, статьи про раскрутку сайтов, web дизайн, flash, 
photoshop, хостинг, рассылки; форум, баннерная сеть, каталог 
сайтов, услуги продвижения и рекламы сайтов Скрипт для определения тиц (Яндекс CY: индекс цитирования). Определение pr (Google Pagerank). Проверить тиц pr сайта.
Copyright WebMaster.Clan © 2006 Бесплатный хостинг uCoz