Вам необходимо всегда знать, в какой кодировке находится строка и является ли она многобайтовой. В конце концов, вам нужно передать кодировку строки как второй параметр в mb_strlen()
, чтобы получить надежные результаты, верно?
Кодировка входящих данных всегда будет определяться каким-либо образом - кодировка страницы при обработке данных формы; кодирование соединения с базой данных и таблиц при обработке данных базы данных; и так далее. Ваша задача - создать поток таким образом, чтобы вы всегда знали, что и в какой кодировке.
Единственное исключение - когда вы имеете дело с произвольными данными третьих сторон, которые не декларируют кодировку своего контента должным образом. Именно тогда (и только тогда) можно использовать функции сниффинга, такие как mb-detect-encoding()
и коллеги. Помните, что эти функции очень подвержены ошибкам и могут дать вам только обоснованное предположение о том, в чем заключается кодировка строки, а не надежную достоверную информацию.