php str_replace частично меняет строку, вместо того, чтобы заменить ее полностью
У меня есть большой массив вида
$arr = [
'Entry' => 'Запись',
'Attachments' => 'Файлы',
'2 weeks ago' => '2 недели назад',
'A week ago' => 'Неделю назад',
...
];
В нем порядка 910 пар ключ значение
Также есть js файл в котором нужно поменять русские слова на английские
Например было <div>'+Послезавтра+', </div>, а нужно чтобы стало <div>'+In 2 days+', </div>
В итоге попробовал открывать файл в file_get_contents циклом идти по массиву и на каждой итерации с помощью str_replace менять строки.
Частично это отрабатывает верно, однако на некоторых строках срабатывает не корректно
Например
меняет "Месяц" не на "Month" а на "Monthяц" или
меняет "Жизнь" не на "Life" а на "Жofнь"
Также на некоторых строках он добавляет запятые Например "Вторник" меняет на "Tueорн,к" вместо "Tuesday"
При этом при запуске одиночных замен (без прохода по массиву) Все меняется корректно, что на мой взгляд исключает проблему кодировок и пр.
Мое предположение, что сбоит из-за огромного файла (> 75k строк - не спрашивайте, это действительно грустно), но как подтвердить эту гипотезу и самое главное, как это исправить, я не знаю.
Ответы (1 шт):
Вместо str_replace используйте mb_str_replace. И вообще для русских строк используйте функции с префиксом "mb_"
Про многобайтовые строки можно почитать в доках