Евгений Степанищев

Я — эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.

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 17:42

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

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

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

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

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

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

bolk (bolknote.ru)
20 марта 2008, 19: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, 19: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, 19:52, ответ предназначен zencd.livejournal.com:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ufawebmaster.ya.ru (Ufawebmaster.ya.ru)
21 января 2009, 23: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 и ещё в целой куче других.

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

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

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

Подсказка по написанию комментария

В комментариях можно применять следующую специальную разметку:

  • слово, обрамлённое в «звёздочки» выделяется *жирным*
  • ссылка становится ссылкой: http://bolknote.ru
  • ссылка в скобках также становится ссылкой, закрывающая скобка не захватывается: (http://bolknote.ru)
  • каждую строку цитаты следует начинать со знака «больше»:
    > это цитата
    > из двух строк
  • можно вставить картинку, залитую на один из сервисов: «Яндекс.Фотки», «Фликр» или «Пикплз». Для этого нужно вставить на страницу полный адрес вашей картинки на сервисе, он превратится в картинку:

    http://fotki.yandex.ru/users/bolknote/view/274311?page=3