Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Хелп, почему-то не работает замена
Форумы портала PHP.SU » » Вопросы новичков » Хелп, почему-то не работает замена

Страниц (2): [1] 2 »
 

1. event - 06 Февраля, 2017 - 19:19:23 - перейти к сообщению
Всем привет.

Есть такой код:

PHP:
скопировать код в буфер обмена
  1. $search = "є"; //Нужно это заменить
  2. $replace = "есть"; //На это
  3.  
  4. $string = "Какой-то є текст"; //В этом тексте
  5.  
  6. echo preg_replace('/(\b)'.$search.'(\b)/i','$1' . $replace .'$2', $string);


Но в итоге, почему-то не работает. С русским буквами все ок, а вот с украинскими такая беда? Как пофиксить? Улыбка
2. Строитель - 06 Февраля, 2017 - 19:22:36 - перейти к сообщению
event, модификатор "u" добавьте в шаблон, и будет происходить замена
PHP:
скопировать код в буфер обмена
  1. echo preg_replace('/(\b)'.$search.'(\b)/iu','$1' . $replace .'$2', $string);
3. event - 06 Февраля, 2017 - 19:24:50 - перейти к сообщению
Строитель пишет:
event, модификатор "u" добавьте в шаблон, и будет происходить замена
PHP:
скопировать код в буфер обмена
  1. echo preg_replace('/(\b)'.$search.'(\b)/iu','$1' . $replace .'$2', $string);


Пробовал так, не работает =(
4. Строитель - 06 Февраля, 2017 - 19:29:32 - перейти к сообщению
event, я тоже на локалке проверил - у меня замена происходит без проблем.
PHP:
скопировать код в буфер обмена
  1. $search = "є"; //Нужно это заменить
  2. $replace = "есть"; //На это
  3.  
  4. $string = "Какой-то є текст"; //В этом тексте
  5.  
  6. // Вывод в браузер : Какой-то есть текст
  7. echo preg_replace('/(\b)'. $search .'(\b)/iu', '$1'. $replace .'$2', $string);
5. event - 06 Февраля, 2017 - 19:33:49 - перейти к сообщению
Строитель пишет:
event, я тоже на локалке проверил - у меня замена происходит без проблем.
PHP:
скопировать код в буфер обмена
  1. $search = "є"; //Нужно это заменить
  2. $replace = "есть"; //На это
  3.  
  4. $string = "Какой-то є текст"; //В этом тексте
  5.  
  6. // Вывод в браузер : Какой-то есть текст
  7. echo preg_replace('/(\b)'. $search .'(\b)/iu', '$1'. $replace .'$2', $string);


Прямо этим кодом попробовал - нифика. Странно, кодировка стоит UTF8
(Добавление)
А если поменяю на windows-1251 в .htaccess и кодировку самого файла + убираю u то все работает. В чем прикол...
6. Строитель - 06 Февраля, 2017 - 19:37:57 - перейти к сообщению
event, ну видимо ваш текст, в котором осуществляется поиск, написан в windows-1251.
Больше я не знаю причин.
7. event - 06 Февраля, 2017 - 19:41:03 - перейти к сообщению
Строитель пишет:
event, ну видимо ваш текст, в котором осуществляется поиск, написан в windows-1251.
Больше я не знаю причин.


Хм, вроде все нормально, по разному попробовал. Кажется что то здесь кроетcя:

А если поменяю на windows-1251 в .htaccess и кодировку самого файла + убираю u то все работает. В чем прикол...
(Добавление)
Прикол в том что не хочет как раз с украинскими буквами работать. Как его заставить? Радость
8. Строитель - 06 Февраля, 2017 - 19:48:10 - перейти к сообщению
Сперва преобразовать текст, в котором осуществляется поиск, из windows-1251 в utf-8, а потом уже обрабатывать регуляркой.
9. event - 06 Февраля, 2017 - 20:01:55 - перейти к сообщению
Строитель пишет:
Сперва преобразовать текст, в котором осуществляется поиск, из windows-1251 в utf-8, а потом уже обрабатывать регуляркой.


PHP:
скопировать код в буфер обмена
  1.  $search = "і"; //Нужно это заменить
  2.     $replace = "есть"; //На это
  3.      
  4.     $string = iconv("windows-1251", "utf-8", "Какой-то і текст"); //В этом тексте
  5.      
  6.    
  7.    echo preg_replace('/(\b)'. $search .'(\b)/iu', '$1'. $replace .'$2', $string);


Не воркает...
10. Строитель - 06 Февраля, 2017 - 20:14:35 - перейти к сообщению
event пишет:
Не воркает...
А должно? Имеет смысл сперва определить кодировку, а потом уже её преобразовывать
PHP:
скопировать код в буфер обмена
  1. $search = "і"; //Нужно это заменить
  2. $replace = "есть"; //На это
  3. $string = "Какой-то і текст";
  4.  
  5. $enc = mb_detect_encoding($string);
  6. $string = iconv($enc, "utf-8", $string);
  7.  
  8. echo preg_replace('/(\b)'. $search .'(\b)/iu', '$1'. $replace .'$2', $string);
  9.  
11. event - 06 Февраля, 2017 - 20:16:15 - перейти к сообщению
Строитель пишет:
event пишет:
Не воркает...
А должно? Имеет смысл сперва определить кодировку, а потом уже её преобразовывать
PHP:
скопировать код в буфер обмена
  1. $search = "і"; //Нужно это заменить
  2. $replace = "есть"; //На это
  3. $string = "Какой-то і текст";
  4.  
  5. $enc = mb_detect_encoding($string);
  6. $string = iconv($enc, "utf-8", $string);
  7.  
  8. echo preg_replace('/(\b)'. $search .'(\b)/iu', '$1'. $replace .'$2', $string);
  9.  


Тоже не фуричит, что ж такое... Не понял
(Добавление)
Потестил на сервере под CentOS все ок. А че на винде у меня оно фуричить не хочет. Однако
12. teleoperator27 - 06 Февраля, 2017 - 20:26:10 - перейти к сообщению
надо у всех. Специально конвертнул файл в cp1251, все корректно выводится

CODE (htmlphp):
скопировать код в буфер обмена
  1. $search = "є";
  2.  
  3. $replace = "есть";  
  4.  
  5. $string = "Какой-то є текст";  
  6.  
  7. $search = iconv('CP1251', 'UTF-8', $search);
  8.  
  9. $replace = iconv('CP1251', 'UTF-8', $replace);
  10.  
  11. $string = iconv('CP1251', 'UTF-8',$string);
  12.  
  13. echo preg_replace('/(\b)'. $search .'(\b)/iu', '$1'. $replace .'$2', $string);
13. event - 06 Февраля, 2017 - 20:29:56 - перейти к сообщению
teleoperator27 пишет:
надо у всех. Специально конвертнул файл в cp1251, все корректно выводится

CODE (htmlphp):
скопировать код в буфер обмена
  1. $search = "є";
  2.  
  3. $replace = "есть";  
  4.  
  5. $string = "Какой-то є текст";  
  6.  
  7. $search = iconv('CP1251', 'UTF-8', $search);
  8.  
  9. $replace = iconv('CP1251', 'UTF-8', $replace);
  10.  
  11. $string = iconv('CP1251', 'UTF-8',$string);
  12.  
  13. echo preg_replace('/(\b)'. $search .'(\b)/iu', '$1'. $replace .'$2', $string);


Не помогло, cp1251 поменял windows-1251, по другом крякозабры были.
(Добавление)
Замкнутый кут, могу дать доступ через TeamViewer =))))
14. teleoperator27 - 06 Февраля, 2017 - 20:41:30 - перейти к сообщению
ну попробуй локали задать или юзай mbstring
15. event - 06 Февраля, 2017 - 21:39:21 - перейти к сообщению
Перенес все на другой сервер - там ок все, итак это мне для единоразовой задачи нужно.

Подскажите, как включить регистрозависомость?

PHP:
скопировать код в буфер обмена
  1. $text  = preg_replace('/(\b)' . $value .'(\b)/iu','$1' . $replaceSlov[$key] .'$2',$text);

 

Powered by ExBB FM 1.0 RC1