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 комментариев
morozov.livejournal.com

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

Евгений Степанищев (bolknote.ru)

Комментарий для morozov.livejournal.com:

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

tserbis (BresSergey.com)

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

Евгений Степанищев (bolknote.ru)

Комментарий для 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

Комментарий для Евгения Степанищева:

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

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

Евгений Степанищев (bolknote.ru)

Комментарий для zencd.livejournal.com:

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

Евгений Степанищев (bolknote.ru)

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

acerbial (coprophagous.ru)

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

FX Poster (blog.fxposter.org)

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

FX Poster (blog.fxposter.org)

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

Евгений Степанищев (bolknote.ru)

Комментарий для coprophagous.ru:

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

Евгений Степанищев (bolknote.ru)

Комментарий для coprophagous.ru:

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

svdev.livejournal.com

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

Ufawebmaster.ya.ru

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

Skobkin.ru (skobkin-ru.ya.ru)

Комментарий для Евгения Степанищева:

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

Евгений Степанищев (bolknote.ru)

Комментарий для skobkin-ru.ya.ru:

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

andyb

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

andyb@meta.ua

Забыл адрес

Евгений Степанищев (bolknote.ru)

Комментарий для andyb:

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

Панда Анонимус

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

Популярное