str_replace() и непонятные баги

V
На сайте с 10.01.2012
Offline
85
497

Приветствую. В кратце объясню суть проблемы.

Есть файл шаблона. Скрипт открывает его и содержимое заносит в переменную, на основе полученных POST-данных произвожу замена вида

str_replace($array1, $tmp_array1, $data);

где $tmp_array1 - массив полученный преобразованием строки в массив.

Скрипт работает прекрасно, но для 2-х фрагментов шаблона почему-то при замене русских символов после замены наблюдаю подобную картину http://SSMaker.ru/a7b03436/

Вместо символов знаки вида xYY

Если заменять не посимвольно, а целой строкой полученных данных - то все прекрасно заменяется, а вот разбив стрку на массив получаю такую белиберду.

P.S. В одном файле проблема только с 2-мя фрагментами и они идентичны остальным, которые прекрасно работают. Все файлы в UTF-8.

siv1987
На сайте с 02.04.2009
Offline
427
#1

Символы замены нужно кодировать в UTF-8. Также смотреть какие символы таким образом заменяются и сравнить их байты.

V
На сайте с 10.01.2012
Offline
85
#2

Разобрался. В массив символ кириллицы заносился в 2 элемента массива.

Преобразовал строку в массив функцией preg_split и все стало как нужно.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#3
Преобразовал строку

, а это как преобразовывали?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
siv1987
На сайте с 02.04.2009
Offline
427
#4
LEOnidUKG:
, а это как преобразовывали?

Наверное через str_split. Автор видимо забыл что это однобайтовая функция.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#5
siv1987:
Наверное через str_split. Автор видимо забыл что это однобайтовая функция.

А... он по символам резал. А я что-то представил explode и думаю, как же так умудрился то 🍿

V
На сайте с 10.01.2012
Offline
85
#6
siv1987:
Наверное через str_split. Автор видимо забыл что это однобайтовая функция.

Нет, просто обращался к стоке как к массиву

$str = 'Строка';

должно вывести 4-й символ

echo $str[3]; // о

Раньше использовал такой метод - сегодня не прошло))

siv1987
На сайте с 02.04.2009
Offline
427
#7
Varenik:
Нет, просто обращался к стоке как к массиву

Те же грабли /ru/forum/876967

Вам же один раз говорили, что эти функции и конструкции используют для смещения один байт, тогда как UTF-8 это многобайтовая кодировка. Вынужден констатировать что вы так ничего и не усвоили и прошлой темы.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий