[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регистро-независимая замена символов в строке
Pulse
Задача значительно сокращена, для упрощения понимания. Собственно код:
setlocale(LC_ALL, 'ru_RU'); 
$testString = 'Форум PHP';
$inputString = 'фо';
echo preg_replace('#' . $inputString . '#i', '<strong>' . $inputString . '</strong>', $testString);
Собственно суть проблемы: не происходит замена, хотя стоит модификатор i в паттерне. Сам файл и его содержимое в кодировке utf-8. Версия PHP 5.2.12. Пробовал ставить модификатор ещё u, но тоже безрезультатно.



Спустя 19 минут, 46 секунд (17.05.2012 - 04:13) Pulse написал(а):
Походу нашёл причину. Это скорее всего баг php, а точнее PCRE судя по пруфлинку https://bugs.php.net/bug.php?id=47480&edit=1
Но вопрос тогда в том, как реализовать данную задачу минуя этот косяк blink.gif

Спустя 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" для работы с кириллицей
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() в тестовом коде

Спустя 12 часов, 14 минут, 44 секунды (18.05.2012 - 14:57) Pulse написал(а):
Сам уже разобрался, но всё равно спасибо за ответы, действительно была трабла с модификатором u, не знаю почему у меня он с первого раза не сработал.
Немножко модифицировал код, чтобы оставлять символ в верхнем регистре, если кому понадобится, вот:
$testString = 'Форум PHP';
$inputString = 'фо';
echo preg_replace('#(' . preg_quote($inputString, '#') . ')#iu', '<strong>$1</strong>', $testString);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.