setlocale(LC_ALL, 'ru_RU');Собственно суть проблемы: не происходит замена, хотя стоит модификатор i в паттерне. Сам файл и его содержимое в кодировке utf-8. Версия PHP 5.2.12. Пробовал ставить модификатор ещё u, но тоже безрезультатно.
$testString = 'Форум PHP';
$inputString = 'фо';
echo preg_replace('#' . $inputString . '#i', '<strong>' . $inputString . '</strong>', $testString);
Спустя 19 минут, 46 секунд (17.05.2012 - 04:13) Pulse написал(а):
Походу нашёл причину. Это скорее всего баг php, а точнее PCRE судя по пруфлинку https://bugs.php.net/bug.php?id=47480&edit=1
Но вопрос тогда в том, как реализовать данную задачу минуя этот косяк
Но вопрос тогда в том, как реализовать данную задачу минуя этот косяк
Спустя 4 часа, 25 минут, 28 секунд (17.05.2012 - 08:38) Nikitian написал(а):
Инпутстринг покажите. В таких конструкциях необходимо использовать preg_quote()
Спустя 4 часа, 8 минут, 18 секунд (17.05.2012 - 12:46) Pulse написал(а):
Nikitian
У меня не работает конкретный пример, описанный в топике. Проблема не из-за экранирования символов, а в том, что не хочет заменять букву кириллицы в верхнем регистре.
У меня не работает конкретный пример, описанный в топике. Проблема не из-за экранирования символов, а в том, что не хочет заменять букву кириллицы в верхнем регистре.
Спустя 11 часов, 7 минут, 16 секунд (17.05.2012 - 23:54) walerus написал(а):
Модификатор "u" для работы с кириллицей
работает 100%
<strong>фо</strong>рум PHP
setlocale(LC_ALL, 'ru_RU');
$testString = 'Форум PHP';
$inputString = 'фо';
echo preg_replace('#' . $inputString . '#iu', '<strong>' . $inputString . '</strong>', $testString);
работает 100%
<strong>фо</strong>рум PHP
Спустя 3 минуты, 50 секунд (17.05.2012 - 23:57) inpost написал(а):
Сделай файл, в нем помести эти 3 строчки, не забудь ещё через header() передать кодировку в начале. И проверяй тогда.
Спустя 2 часа, 44 минуты, 42 секунды (18.05.2012 - 02:42) Invis1ble написал(а):
с модификатором u все прекрасно работает
PS. Кстати, непонятно, причем здесь setlocale() в тестовом коде
PS. Кстати, непонятно, причем здесь setlocale() в тестовом коде
Спустя 12 часов, 14 минут, 44 секунды (18.05.2012 - 14:57) Pulse написал(а):
Сам уже разобрался, но всё равно спасибо за ответы, действительно была трабла с модификатором u, не знаю почему у меня он с первого раза не сработал.
Немножко модифицировал код, чтобы оставлять символ в верхнем регистре, если кому понадобится, вот:
Немножко модифицировал код, чтобы оставлять символ в верхнем регистре, если кому понадобится, вот:
$testString = 'Форум PHP';
$inputString = 'фо';
echo preg_replace('#(' . preg_quote($inputString, '#') . ')#iu', '<strong>$1</strong>', $testString);