Задать вопрос
@Forman

Почему str_ireplace странно работает?

Пример:
$from = [ 'O','Ó','o','ó' ];
$to = [ ''О,'У','о','у' ];
$result = str_ireplace($from, $to, $text);

Если в $text содержится:
O o
Ó ó

То результат будет такой:
О О
У у

Мне желательно получить результат:
О о
У у

Но я не могу использовать регистрозависимую замену, поскольку в автозамене есть варианты состоящие из многих букв, и если замена будет регистрозависимой, то придется делать сотни вариантов на случай, если одна или несколько букв будут большими.
  • Вопрос задан
  • 187 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
@Forman Автор вопроса
Решение для задачи нашлось тут: Как сделать регистронезависимую замену?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Вам ПРИЙДЁТСЯ использовать регистрозависимый str_replace.
Смиритесь и думайте над автоматической генерацией массивов $from и $to.
Ответ написан
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Если я правильно понял, то может помочь трюк с двойной заменой
Сперва с учётом регистра, потом без учёта.

$result = str_replace($from, $to, $text);
$result = str_ireplace($from, $to, $result);


Вообще судя по описанию автор решает задачу замены символов с диакритическими знаками на аналоги без.
Если так то попробуйте этот скрипт https://github.com/infralabs/DiacriticsRemovePHP

Ещё вариант использовать iconv() с флагом //TRANSLIT
$result = iconv('UTF-8', 'US-ASCII//TRANSLIT', $text);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы