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».
20 марта 2008 16:42

morozov.livejournal.com (morozov.livejournal.com)
20 марта 2008, 17:47

Нужно отметить, что строка, содержащая только ASCII-символы тоже принимается за юникодную.

bolk (bolknote.ru)
20 марта 2008, 17:48, ответ предназначен morozov.livejournal.com:

Не «ASCII», а «нижняя половина ASCII». Это тоже UTF-8.

tserbis (BresSergey.com)
20 марта 2008, 17:50

Там бы ещё модификатор s, но тогда теоретически возможно оптимизационное "выполнение" таких регулярок "не глядя на строку", что теоретически может испортить всю идею.

bolk (bolknote.ru)
20 марта 2008, 18:03, ответ предназначен bressergey.com:

а он там не важен — сначала идёт проверка на валидность строки (из доки по 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 (zencd.livejournal.com)
20 марта 2008, 18:44, ответ предназначен bolk (bolknote.ru):

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

ASCII, is a character encoding based on the English alphabet... ASCII includes definitions for 128 characters... (wiki)

bolk (bolknote.ru)
20 марта 2008, 18:52, ответ предназначен zencd.livejournal.com:

Как это не называй, а всё одно — символы с кодами 0-127 входят в UTF-8.

bolk (bolknote.ru)
20 марта 2008, 20:00

Странно, что до сих пор никто не пришёл и не сказал, что символ с кодом ноль в UTF-8 не входит.

acerbial (coprophagous.ru)
20 марта 2008, 21:32

Так ведь символ с кодом ноль в UTF-8 не входит!

FX Poster (blog.fxposter.org)
20 марта 2008, 22:06

А я вот такое видел:
preg_match('/^.$/u', 'ñ')

FX Poster (blog.fxposter.org)
20 марта 2008, 22:07

Тьфу, это проверка наличия поддержки UTF-8... Шото я затупил :)

bolk (bolknote.ru)
21 марта 2008, 12:13, ответ предназначен acerbial (coprophagous.ru):

О! Дима проснулся :) У тебя дома интернет что ли есть?

bolk (bolknote.ru)
21 марта 2008, 12:13, ответ предназначен acerbial (coprophagous.ru):

А мы тут твой проект украли!

svdev.livejournal.com (svdev.livejournal.com)
16 октября 2008, 18:50

Спасибо большое за идею - работает :)

Ufawebmaster.ya.ru (Ufawebmaster.ya.ru)
21 января 2009, 22:16

Спасибо, простое и быстрое решение :)

Skobkin.ru (skobkin-ru.ya.ru)
14 июня 2010, 03:50, ответ предназначен bolk (bolknote.ru):

Спасибо. Попробовал.
Интересно, что мне в решении не помогло.
Хотя, у меня проверка кодировки была лишь возможным методом определения проблемы...

bolk (bolknote.ru)
14 июня 2010, 11:26, ответ предназначен Skobkin.ru (skobkin-ru.ya.ru):

Если вы используете определение кодировки на латинских буквах и/или цифрах, то оно и не поможет, такой текст находится и в кодировке UTF-8, и в, скажем, CP866, CP1251, CP1252 и ещё в целой куче других.

andyb (инкогнито)
21 мая 2012, 10:05

Если "такой текст находится и в кодировке UTF-8, и в, скажем, CP866, CP1251, CP1252 и ещё в целой куче других"
выкиньте все эти стандарты на мусорник. Исторически сложилась ситуация, что никчемные стандарты типа HTML занимают доминирующее положение. В России надо от них отказаться, так же как сделали с шириной рельсовой колеи.

andyb@meta.ua (инкогнито)
21 мая 2012, 10:06

Забыл адрес

bolk (bolknote.ru)
21 мая 2012, 10:43, ответ предназначен andyb

Вы, кажется, ответили вне контекста.

Панда Анонимус (инкогнито)
20 июня 2015, 12:03

Спасибо большое, спасли меня)

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)