Блог Обо мне Храню Читаю Ем 99  

20.03.2008, Nº 1632



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.03 16:42
20.03 16:42



20.03.2008, Nº 1632

#1 morozov.livejournal.com 20.03.2008, 17:47

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

#2 bolk @bolknote.ru20.03.2008, 17:48 ответил morozov.livejournal.com

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

#3 tserbis @BresSergey.com20.03.2008, 17:50

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

#4 bolk @bolknote.ru20.03.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».

#5 zencd.livejournal.com 20.03.2008, 18:44 ответил bolknote.ru

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

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

#6 bolk @bolknote.ru20.03.2008, 18:52 ответил zencd.livejournal.com

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

#7 bolk @bolknote.ru20.03.2008, 20:00

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

#8 acerbial @coprophagous.ru20.03.2008, 21:32

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

#9 FX Poster @blog.fxposter.org20.03.2008, 22:06

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

#10 FX Poster @blog.fxposter.org20.03.2008, 22:07

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

#11 bolk @bolknote.ru21.03.2008, 12:13 ответил coprophagous.ru

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

#12 bolk @bolknote.ru21.03.2008, 12:13 ответил coprophagous.ru

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

#13 svdev.livejournal.com 16.10.2008, 18:50

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

#14 Ufawebmaster.ya.ru 21.01.2009, 22:16

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

#15 Skobkin.ru @skobkin-ru.ya.ru14.06.2010, 03:50 ответил bolknote.ru

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

#16 bolk @bolknote.ru14.06.2010, 11:26 ответил skobkin-ru.ya.ru

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

Текст комментария (для гиков: не HTML, а текст!)


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


Евгений Степанищев (imbolk@gmail.com)
t=0.053