preg_replace и русские буквы

Пример

Например нам нужно подсветить слова в тексте. Рассмотрим пример в двух кодировках — utf-8 и windows-1251

Кодировка UTF-8

Давно пора переходить на юникод.

<?php $words = 'тексте этот слова строке текст время балды регистр подсветить'; $text = 'В нашем тЕксТе нам необходимо найти все Слова, указанные в стрОке поиска и подсветить их красным цветом. Так же во время поиска необходимо учитывать РЕГИСТр букв. Этот ТЕКСТ я набирал от Балды, лишь бы выдать пример. Все слова должны быть подсвечены.'; echo '<p>'.$text.'</p>'; echo '<p>Нам нужно подсветить слова: <strong>'.$words.'</strong></p>'; // устанавливаем локаль setlocale(LC_ALL, 'ru_RU.UTF-8'); // заменяем пробелы на символ | $words = str_replace(' ', '|', $words); // нам нужны 2 модификатора: // u — модификатор включает обработку шаблонов как UTF-8 строк // i — символы в шаблоне соответствуют как верхнему, так и нижнему регистрам $hl_text = preg_replace('/('.$words.')/ui', '<span style="color:red;">$1</span>', $text); echo '<p>'.$hl_text.'</p>'; ?>

Кодировка WINDOWS-1251

Windows-1251 все равно никто не отменял.

<?php $words = 'тексте этот слова строке текст время балды регистр подсветить'; $text = 'В нашем тЕксТе нам необходимо найти все Слова, указанные в стрОке поиска и подсветить их красным цветом. Так же во время поиска необходимо учитывать РЕГИСТр букв. Этот ТЕКСТ я набирал от Балды, лишь бы выдать пример. Все слова должны быть подсвечены.'; echo '<p>'.$text.'</p>'; echo '<p>Нам нужно подсветить слова: <strong>'.$words.'</strong></p>'; // устанавливаем локаль setlocale(LC_ALL, 'ru_RU.CP1251'); // заменяем пробелы на символ | $words = str_replace(' ', '|', $words); // нам нужен 1 модификатор: // i — символы в шаблоне соответствуют как верхнему, так и нижнему регистрам $hl_text = preg_replace('/('.$words.')/i', '<span style="color:red;">$1</span>', $text); echo '<p>'.$hl_text.'</p>'; ?>

Результат

Результат в обоих случаях будет одинаковый:

В нашем тЕксТе нам необходимо найти все Слова, указанные в стрОке поиска и подсветить их красным цветом. Так же во время поиска необходимо учитывать РЕГИСТр букв. Этот ТЕКСТ я набирал от Балды, лишь бы выдать пример. Все слова должны быть подсвечены.

Нам нужно подсветить слова: тексте этот слова строке текст время балды регистр подсветить

В нашем тЕксТе нам необходимо найти все Слова, указанные в стрОке поиска и подсветить их красным цветом. Так же во время поиска необходимо учитывать РЕГИСТр букв. Этот ТЕКСТ я набирал от Балды, лишь бы выдать пример. Все слова должны быть подсвечены.

Категории

ПрограммированиеPHPРегулярные выраженияРегулярные выражения в PHP

Комментарии

Леший Кикиморов

ru_RU.koi8r - для CentOS
Russian_Russia.1251 -для Windows 7

Ответить
Леший Кикиморов

В кодировке WINDOWS-1251 не работает полностью. Подсветка есть только у слов, совпадающие по регистру.

Ответить