Нужно ли mb_ * заменять однобайтовые символы из многобайтовой строки? - PullRequest
6 голосов
/ 06 февраля 2012

Допустим, у меня есть текст UTF-8, подобный этому:

âàêíóôõ <br> âàêíóôõ <br> âàêíóôõ

Я хочу заменить <br> на <br />.Нужно ли использовать mb_str_replace или я могу использовать str_replace?

Заключение < b r / > все однобайтовые символы?

Ответы [ 2 ]

4 голосов
/ 06 февраля 2012

Поскольку str_replace является бинарно-безопасным, а UTF-8 является биективным кодированием, вы можете использовать str_replace, даже если строка поиска или замена содержит многобайтовые символы, если все три параметры кодируются как UTF-8.

Вот почему нет функции mb_str_replace.

Если ваша кодировка не является биективной - то есть существует несколько представлений одной и той же строки, например < в UTF-7, которая может быть выражена как '+ADw-' и '<', вы должны преобразовать все строки в используйте ту же (биективную) кодировку, примените str_replace, а затем преобразуйте строки в целевую кодировку.

2 голосов
/ 06 февраля 2012

Справочник по безопасному управлению строками UTF-8 в PHP .Здесь нет строгих правил.Некоторые нативные функции строковых функций PHP могут безопасно работать на utf-8, некоторые могут с осторожностью, а некоторые нет.

Нет mb_str_replace().Обратите внимание на раздел «Безопасная функциональность UTF-8»: explode() и str_replace() безопасны до тех пор, пока все три аргумента для него являются действительными строками UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...