Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Регистро-независимая замена символов в строке
Pulse  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 159
Пользователь №: 23731
На форуме: 6 лет, 3 месяца, 4 дня
Карма: 10




Задача значительно сокращена, для упрощения понимания. Собственно код:
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);
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса