PHP: простой способ определения кодировки UTF-8

Придумал простой способ определения кодировки UTF-8 в PHP, работает без модулей iconv и multibyte string (mb-функции):

if (preg_match('//u', $string)) { /* у вас UTF-8 */ }

Работать должно, думаю, с версии PHP 4.3.5, в документации сказано: «UTF-8 validity of the pattern is checked since PHP 4.3.5».

Читайте также

PHP и UTF-8: первый этап
Я решил описать переход проекта на UTF-8, как это у меня получается. Иногда будут достаточно больше куски кода.
2010

Комментарии 21

tserbis (BresSergey.com) № 3
Там бы ещё модификатор s, но тогда теоретически возможно оптимизационное «выполнение» таких регулярок «не глядя на строку», что теоретически может испортить всю идею.
Евгений Степанищев (bolknote.ru) автор № 4
а он там не важен — сначала идёт проверка на валидность строки (из доки по PCRE): «When you set the PCRE_UTF8 flag, the strings passed as patterns and subjects are (by default) checked for validity on entry to the relevant functions».
zencd.livejournal.com № 5
Комментарий для Евгения Степанищева:

Голосую за morozovа, по-моему верхняя половина — уже и на ASCII вовсе.

ASCII, is a character encoding based on the English alphabet… ASCII includes definitions for 128 characters… (wiki)
acerbial (coprophagous.ru) № 8
Так ведь символ с кодом ноль в UTF-8 не входит!
Skobkin.ru (skobkin-ru.ya.ru) № 15
Комментарий для Евгения Степанищева:

Спасибо. Попробовал.
Интересно, что мне в решении не помогло.
Хотя, у меня проверка кодировки была лишь возможным методом определения проблемы…
Евгений Степанищев (bolknote.ru) автор № 16
Если вы используете определение кодировки на латинских буквах и/или цифрах, то оно и не поможет, такой текст находится и в кодировке UTF-8, и в, скажем, CP866, CP1251, CP1252 и ещё в целой куче других.
andyb № 17
Если «такой текст находится и в кодировке UTF-8, и в, скажем, CP866, CP1251, CP1252 и ещё в целой куче других»
выкиньте все эти стандарты на мусорник. Исторически сложилась ситуация, что никчемные стандарты типа HTML занимают доминирующее положение. В России надо от них отказаться, так же как сделали с шириной рельсовой колеи.