Detect encoding windows 1251

mb_detect_encoding — Определение кодировки символов

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

mb_detect_encoding — Определение кодировки символов

Описание

Определяет кодировку символов в строке string str .

Список параметров

Строка string , кодировку в которой требуется определить.

encoding_list список возможных кодировок. Может быть представлен массивом или строкой, в которой будут перечислены названия кодировок, отделенные запятыми.

Если encoding_list не задан, будет применен detect_order.

strict задает режим точного определения кодировки. По умолчанию FALSE .

Возвращаемые значения

Название кодировки или FALSE , если для заданной строки определить кодировку не удалось.

Примеры

Пример #1 Пример использования mb_detect_encoding()

/* Определение кодировки с текущим detect_order */
echo mb_detect_encoding ( $str );

/* «auto» раскрывается в соответствии с mbstring.language */
echo mb_detect_encoding ( $str , «auto» );

/* Зададим список кодировок encoding_list в виде строки */
echo mb_detect_encoding ( $str , «JIS, eucjp-win, sjis-win» );

/* Использование массива для задания возможных кодировок encoding_list */
$ary [] = «ASCII» ;
$ary [] = «JIS» ;
$ary [] = «EUC-JP» ;
echo mb_detect_encoding ( $str , $ary );
?>

Смотрите также

  • mb_detect_order() — Установка/получение списка кодировок для механизмов определения кодировки

Универсальный декодер — конвертер кириллицы

Результат

[Результат перекодировки появится здесь. ]

Поставьте ссылку на наш сайт!
Универсальный декодер кириллицы Custom Work
For a small fee I can help you quickly recode/recover large pieces of data — texts, databases, websites. or write custom functions you can use (invoice available).
FAQ and contact information.

О программе

Здравствуйте! Эта страница может пригодиться, если вам прислали текст (предположительно на кириллице), который отображается в виде странной комбинации загадочных символов. Программа попытается угадать кодировку, а если не получится, покажет примеры всех комбинаций кодировок, чтобы вы могли выбрать подходящую.

Использование

  • Скопируйте текст в большое текстовое поле дешифратора. Несколько первых слов будут проанализированы, поэтому желательно, чтобы в них содержалась (закодированная) кириллица.
  • Программа попытается декодировать текст и выведет результат в нижнее поле.
  • В случае удачной перекодировки вы увидите текст в кириллице, который можно при необходимости скопировать и сохранить.
  • В случае неудачной перекодировки (текст не в кириллице, состоящий из тех же или других нечитаемых символов) можно выбрать из нового выпадающего списка вариант в кириллице (если их несколько, выбирайте самый длинный). Нажав OK вы получите корректный перекодированный текст.
  • Если текст перекодирован лишь частично, попробуйте выбрать другие варианты кириллицы из выпадающего списка.

Ограничения

  • Если текст состоит из вопросительных знаков («. ?? . «), то проблема скорее всего на стороне отправителя и восстановить текст не получится. Попросите отправителя послать текст заново, желательно в формате простого текстового файла или в документе LibreOffice/OpenOffice/MSOffice.
  • Не любой текст может быть гарантированно декодирован, даже если есть вы уверены на 100%, что он написан в кириллице.
  • Анализируемый и декодированный тексты ограничены размером в 100 Кб.
  • Программа не всегда дает стопроцентную точность: при перекодировке из одной кодовой страницы в другую могут пропасть некоторые символы, такие как болгарские кавычки, реже отдельные буквы и т.п.
  • Программа проверяет максимум 7245 вариантов из двух и трех перекодировок: если имело место многократное перекодирование вроде koi8(utf(cp1251(utf))), оно не будет распознано или проверено. Обычно возможные и отображаемые верные варианты находятся между 32 и 255.
  • Если части текста закодированы в разных кодировках, программа сможет распознать только одну часть за раз.

Условия использования

Пожалуйста, обратите внимание на то, что данная бесплатная программа создана с надеждой, что она будет полезна, но без каких-либо явных или косвенных гарантий пригодности для любого практического использования. Вы можете пользоваться ей на свой страх и риск.

Если вы используете для перекодировки очень длинный текст, убедитесь, что имеется его резервная копия.

Переводчики

Страница подготовки переводов на другие языки находится тут.

Что нового

October 2013 : I am trying different optimizations for the system which should make the decoder run faster and handle more text. If you notice any problem, please notify me ASAP.

На английской версии страницы доступен changelog программы.

Не определяется кодировка строки

Знаю что файл кодировки ANSI, а выводит UTF-8. В связи с этим не могу конвертировать в UTF-8. Если просто вывести $text, выведет � вместо кириллицы. Скрипт в формате UTF-8. Что нужно почитать?

1 ответ 1

Кто подскажет почему так, буду благодарен.

Функция mb_detect_encoding не особо хорошо умеет определять кириллицу. Навскидку см. например тут: https://habr.com/en/post/107945/

И ещё была одна замечательная статья на хабре (к сожалению ссылку потерял и поиском не ищется, возможно уже давно удалена). В двух словах там было следущее: функции автоопределения кодировки в разных блокнотах (notepad++, sublime) достаточно простые, неумные, а главное — на небольших отрезках текста могут давать ложные срабатывания.

Читайте также:  Astra linux зависает при установке

Автор той статьи работал в техподдержке какого-то вебхостинга и пилил свой блокнот для правки файлов прямо на хостинге, поэтому когда его замучали клиенты — разобрался в вопросе достаточно глубоко.

Поэтому, имейте ввиду:

  1. Автоопределение кодировки mb_detect_encoding не очень точное
  2. Вообще автоопределение кириллицы часто реализуется так себе
  3. Особенно плохо автоопределение работает на небольших фрагментах текста

Поэтому этих PHP-функций по автодетекту кириллицы вы встретите на просторах интернета много, разных.

И ещё. Вам в первых двух комментариях к вопросу дали совершенно правильные советы. Прежде чем гонять через iconv кодировки — лучше убедиться, что у вас всё находится в UTF8 (сами исходники, файлы, если это веб — то в хедерах прописано). Все эти костыли, когда у вас один файл на тысячу так некрасиво в коде смотрятся, что проще заранее договориться, что сервис работает строго в utf-8, чем костыли городить.

Определение кодировки текста в PHP вместо mb_detect_encoding

Существует несколько кодировок символов кириллицы.

При создании сайтов в Интернете обычно используют:

  • utf-8
  • windows-1251
  • koi8-r

Еще популярные кодировки:

  • iso-8859-5
  • ibm866
  • mac-cyrillic

Вероятно это не весь список, это те кодировки с которыми я часто сталкиваюсь.

Иногда появляется необходимость определить кодировку текста. И в PHP даже функция для этого есть:

но как писал m00t
в статье Определение кодировки текста в PHP — обзор существующих решений плюс еще один велосипед

Я протестировал функцию определения кодировки по кодам символов, результат меня удовлетворил и я использовал эту функцию пару лет.

Недавно решил переписать проект где использовал эту функцию, нашел готовый пакет на packagist.org cnpait/detect_encoding, в котором кодировка определяется методом m00t

При этом указанный пакет был установлен более 1200 раз, значит не у меня одного периодически возникает задача определения кодировки текста.

Мне бы установить этот пакет и успокоиться, но я решил «заморочиться».

В общем, сделал свой пакет: onnov/detect-encoding.

Как его использовать написано в README.md

А о его тестировании и сравнении с пакетом cnpait/detect_encoding напишу.

Методика тестирования

Берем большой текст: Tolstoy — Anna Karenina
Всего — 1’701’480 знаков

Убираем все лишнее, оставляем только кириллицу:

Осталось 1’336’252 кирилистических знаков.

В цикле берем часть текста (5, 15, 30,… символов) преобразуем в известную кодировку и пытаемся определить кодировку скриптом. Затем сравниваем правильно или нет.

Вот таблица в которой слева кодировки, сверху количество символов по которому определяем кодировку, в таблице результат достоверности в %%

letters -> 5 15 30 60 120 180 270
windows-1251 99.13 98.83 98.54 99.04 99.73 99.93 100.0
koi8-r 99.89 99.98 100.0 100.0 100.0 100.0 100.0
iso-8859-5 81.79 99.27 99.98 100.0 100.0 100.0 100.0
ibm866 99.81 99.99 100.0 100.0 100.0 100.0 100.0
mac-cyrillic 12.79 47.49 73.48 92.15 99.30 99.94 100.0

Наихудшая точность с мак-кириллицей, вам нужно как минимум 60 символов, чтобы определить эту кодировку с точностью 92,15%. Кодировка Windows-1251 также имеет очень низкую точность. Это связано с тем, что номера их символов в таблицах сильно пересекаются.

К счастью, кодировки mac-cyrillic и ibm866 не используются для кодирования веб-страниц.

Попробуем без них:

letters -> 5 10 15 30 60
windows-1251 99.40 99.69 99.86 99.97 100.0
koi8-r 99.89 99.98 99.98 100.0 100.0
iso-8859-5 81.79 96.41 99.27 99.98 100.0

Точность определения высока даже в коротких предложениях от 5 до 10 букв. А для фраз из 60 букв точность определения достигает 100%. А еще, определение кодировки выполняется очень быстро, например, текст длиной более 1 300 000 символов кириллицы проверяется за 0 00096 секунд. (на моем компьютере)

А какие результаты покажет статистический способ описанный m00t:

letters -> 5 10 15 30 60
windows-1251 88.75 96.62 98.43 99.90 100.0
koi8-r 85.15 95.71 97.96 99.91 100.0
iso-8859-5 88.60 96.77 98.58 99.93 100.0

Как видим результаты определения кодировки хорошие. Скорость работы скрипта высокая, особенно на коротких текстах, на огромных текстах скорость значительно уступает. Текст длиной более 1 300 000 символов кириллицы проверяется за 0 32 секунд. (на моем компьютере).

mb_detect_encoding

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

mb_detect_encoding — Определение кодировки символов

Описание

Определяет кодировку символов в строке ( string ) string .

Список параметров

Строка ( string ), для которой требуется определить кодировку.

encodings — список возможных кодировок. Может быть представлен массивом или строкой, в которой будут перечислены названия кодировок, разделённые запятыми.

Если encodings не задан, будет применён detect_order.

strict задаёт режим точного определения кодировки. По умолчанию false .

Возвращаемые значения

Название кодировки или false , если для заданной строки определить кодировку не удалось.

Примеры

Пример #1 Пример использования mb_detect_encoding()

/* Определение кодировки с текущим detect_order */
echo mb_detect_encoding ( $str );

/* «auto» раскрывается в соответствии с mbstring.language */
echo mb_detect_encoding ( $str , «auto» );

/* Зададим список кодировок «encodings» в виде строки */
echo mb_detect_encoding ( $str , «JIS, eucjp-win, sjis-win» );

/* Использование массива для задания возможных кодировок «encodings» */
$ary [] = «ASCII» ;
$ary [] = «JIS» ;
$ary [] = «EUC-JP» ;
echo mb_detect_encoding ( $str , $ary );
?>

Смотрите также

  • mb_detect_order() — Установка/получение списка кодировок для механизмов определения кодировки

User Contributed Notes 23 notes

If you try to use mb_detect_encoding to detect whether a string is valid UTF-8, use the strict mode, it is pretty worthless otherwise.

= ‘áéóú’ ; // ISO-8859-1
mb_detect_encoding ( $str , ‘UTF-8’ ); // ‘UTF-8’
mb_detect_encoding ( $str , ‘UTF-8’ , true ); // false
?>

If you need to distinguish between UTF-8 and ISO-8859-1 encoding, list UTF-8 first in your encoding_list:
mb_detect_encoding($string, ‘UTF-8, ISO-8859-1’);

if you list ISO-8859-1 first, mb_detect_encoding() will always return ISO-8859-1.

I used Chris’s function «detectUTF8» to detect the need from conversion from utf8 to 8859-1, which works fine. I did have a problem with the following iconv-conversion.

The problem is that the iconv-conversion to 8859-1 (with //TRANSLIT) replaces the euro-sign with EUR, although it is common practice that \x80 is used as the euro-sign in the 8859-1 charset.

I could not use 8859-15 since that mangled some other characters, so I added 2 str_replace’s:

if(detectUTF8($str)) <
$str=str_replace(«\xE2\x82\xAC»,»€»,$str);
$str=iconv(«UTF-8″,»ISO-8859-1//TRANSLIT»,$str);
$str=str_replace(«€»,»\x80″,$str);
>

If html-output is needed the last line is not necessary (and even unwanted).

Based upon that snippet below using preg_match() I needed something faster and less specific. That function works and is brilliant but it scans the entire strings and checks that it conforms to UTF-8. I wanted something purely to check if a string contains UTF-8 characters so that I could switch character encoding from iso-8859-1 to utf-8.

I modified the pattern to only look for non-ascii multibyte sequences in the UTF-8 range and also to stop once it finds at least one multibytes string. This is quite a lot faster.

function detectUTF8 ( $string )
<
return preg_match ( ‘%(?:
[\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
|\xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
|[\xE1-\xEC\xEE\xEF][\x80-\xBF] <2># straight 3-byte
|\xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
|\xF0[\x90-\xBF][\x80-\xBF] <2># planes 1-3
|[\xF1-\xF3][\x80-\xBF] <3># planes 4-15
|\xF4[\x80-\x8F][\x80-\xBF] <2># plane 16
)+%xs’ , $string );
>

A simple way to detect UTF-8/16/32 of file by its BOM (not work with string or file without BOM)

// Unicode BOM is U+FEFF, but after encoded, it will look like this.
define ( ‘UTF32_BIG_ENDIAN_BOM’ , chr ( 0x00 ) . chr ( 0x00 ) . chr ( 0xFE ) . chr ( 0xFF ));
define ( ‘UTF32_LITTLE_ENDIAN_BOM’ , chr ( 0xFF ) . chr ( 0xFE ) . chr ( 0x00 ) . chr ( 0x00 ));
define ( ‘UTF16_BIG_ENDIAN_BOM’ , chr ( 0xFE ) . chr ( 0xFF ));
define ( ‘UTF16_LITTLE_ENDIAN_BOM’ , chr ( 0xFF ) . chr ( 0xFE ));
define ( ‘UTF8_BOM’ , chr ( 0xEF ) . chr ( 0xBB ) . chr ( 0xBF ));

function detect_utf_encoding ( $filename ) <

$text = file_get_contents ( $filename );
$first2 = substr ( $text , 0 , 2 );
$first3 = substr ( $text , 0 , 3 );
$first4 = substr ( $text , 0 , 3 );

if ( $first3 == UTF8_BOM ) return ‘UTF-8’ ;
elseif ( $first4 == UTF32_BIG_ENDIAN_BOM ) return ‘UTF-32BE’ ;
elseif ( $first4 == UTF32_LITTLE_ENDIAN_BOM ) return ‘UTF-32LE’ ;
elseif ( $first2 == UTF16_BIG_ENDIAN_BOM ) return ‘UTF-16BE’ ;
elseif ( $first2 == UTF16_LITTLE_ENDIAN_BOM ) return ‘UTF-16LE’ ;
>
?>

Function to detect UTF-8, when mb_detect_encoding is not available it may be useful.

function is_utf8 ( $str ) <
$c = 0 ; $b = 0 ;
$bits = 0 ;
$len = strlen ( $str );
for( $i = 0 ; $i $len ; $i ++) <
$c = ord ( $str [ $i ]);
if( $c > 128 ) <
if(( $c >= 254 )) return false ;
elseif( $c >= 252 ) $bits = 6 ;
elseif( $c >= 248 ) $bits = 5 ;
elseif( $c >= 240 ) $bits = 4 ;
elseif( $c >= 224 ) $bits = 3 ;
elseif( $c >= 192 ) $bits = 2 ;
else return false ;
if(( $i + $bits ) > $len ) return false ;
while( $bits > 1 ) <
$i ++;
$b = ord ( $str [ $i ]);
if( $b 128 || $b > 191 ) return false ;
$bits —;
>
>
>
return true ;
>
?>

Much simpler UTF-8-ness checker using a regular expression created by the W3C:

// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8 ( $string ) <

// From http://w3.org/International/questions/qa-forms-utf-8.html
return preg_match ( ‘%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF] <2># straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF] <2># planes 1-3
| [\xF1-\xF3][\x80-\xBF] <3># planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF] <2># plane 16
)*$%xs’ , $string );

Just a note: Instead of using the often recommended (rather complex) regular expression by W3C (http://www.w3.org/International/questions/qa-forms-utf-8.en.php), you can simply use the ‘u’ modifier to test a string for UTF-8 validity:

if ( preg_match ( «//u» , $string )) <
// $string is valid UTF-8
>

For detect UTF-8, you can use:

if (preg_match(‘!!u’, $str))

In my environment (PHP 7.1.12),
«mb_detect_encoding()» doesn’t work
where «mb_detect_order()» is not set appropriately.

To enable «mb_detect_encoding()» to work in such a case,
simply put «mb_detect_order(‘. ‘)»
before «mb_detect_encoding()» in your script file.

Both
«ini_set(‘mbstring.language’, ‘. ‘);»
and
«ini_set(‘mbstring.detect_order’, ‘. ‘);»
DON’T work in script files for this purpose
whereas setting them in PHP.INI file may work.

beware : even if you need to distinguish between UTF-8 and ISO-8859-1, and you the following detection order (as chrigu suggests)

mb_detect_encoding(‘accentu�e’ , ‘UTF-8, ISO-8859-1’)

returns ISO-8859-1, while

mb_detect_encoding(‘accentu�’ , ‘UTF-8, ISO-8859-1’)

bottom line : an ending ‘�’ (and probably other accentuated chars) mislead mb_detect_encoding

if the function » mb_detect_encoding» does not exist .

static $enclist = array(
‘UTF-8’ , ‘ASCII’ ,
‘ISO-8859-1’ , ‘ISO-8859-2’ , ‘ISO-8859-3’ , ‘ISO-8859-4’ , ‘ISO-8859-5’ ,
‘ISO-8859-6’ , ‘ISO-8859-7’ , ‘ISO-8859-8’ , ‘ISO-8859-9’ , ‘ISO-8859-10’ ,
‘ISO-8859-13’ , ‘ISO-8859-14’ , ‘ISO-8859-15’ , ‘ISO-8859-16’ ,
‘Windows-1251’ , ‘Windows-1252’ , ‘Windows-1254’ ,
);

foreach ( $enclist as $item ) <
$sample = iconv ( $item , $item , $string );
if ( md5 ( $sample ) == md5 ( $string )) <
if ( $ret === NULL ) < $result = $item ; >else < $result = true ; >
break;
>
>

if ( mb_detect_encoding ( $str , ‘UTF-8’ , true ) === false ) <
$str = utf8_encode ( $str );
>

a) if the FUNCTION mb_detect_encoding is not available:

if(! function_exists ( ‘mb_detect_encoding’ )) <
function mb_detect_encoding ( $string , $enc = null ) <

static $list = array( ‘utf-8’ , ‘iso-8859-1’ , ‘windows-1251’ );

foreach ( $list as $item ) <
$sample = iconv ( $item , $item , $string );
if ( md5 ( $sample ) == md5 ( $string )) <
if ( $enc == $item ) < return true ; >else < return $item ; >
>
>
return null ;
>
>

if(! function_exists ( ‘mb_convert_encoding’ )) <
function mb_convert_encoding ( $string , $target_encoding , $source_encoding ) <
$string = iconv ( $source_encoding , $target_encoding , $string );
return $string ;
>
>

Sometimes mb_detect_string is not what you need. When using pdflib for example you want to VERIFY the correctness of utf-8. mb_detect_encoding reports some iso-8859-1 encoded text as utf-8.
To verify utf 8 use the following:

//
// utf8 encoding validation developed based on Wikipedia entry at:
// http://en.wikipedia.org/wiki/UTF-8
//
// Implemented as a recursive descent parser based on a simple state machine
// copyright 2005 Maarten Meijer
//
// This cries out for a C-implementation to be included in PHP core
//
function valid_1byte($char) <
if(!is_int($char)) return false;
return ($char & 0x80) == 0x00;
>

function valid_2byte($char) <
if(!is_int($char)) return false;
return ($char & 0xE0) == 0xC0;
>

function valid_3byte($char) <
if(!is_int($char)) return false;
return ($char & 0xF0) == 0xE0;
>

function valid_4byte($char) <
if(!is_int($char)) return false;
return ($char & 0xF8) == 0xF0;
>

function valid_nextbyte($char) <
if(!is_int($char)) return false;
return ($char & 0xC0) == 0x80;
>

function valid_utf8($string) <
$len = strlen($string);
$i = 0;
while( $i

function mb_detect_encoding($string, $enc=null, $ret=true) <
$out=$enc;
static $list = array(‘utf-8’, ‘iso-8859-1’, ‘iso-8859-15’, ‘windows-1251’);
foreach ($list as $item) <
$sample = iconv($item, $item, $string);
if (md5($sample) == md5($string)) < $out = ($ret !== false) ? true : $item; >
>
return $out;
>

/*
*QQ: 290359552
* conver to Utf8 if $str is not equals to ‘UTF-8’
*/
function convToUtf8 ( $str )
<
if( mb_detect_encoding ( $str , «UTF-8, ISO-8859-1, GBK» )!= «UTF-8» )
<

return iconv ( «gbk» , «utf-8» , $str );

I seriously underestimated the importance of setlocale.
= array(
«mais coisas a pensar sobre diário ou dois!» ,
«plus de choses à penser à journalier ou à deux !» ,
«¡más cosas a pensar en diario o dos!» ,
«più cose da pensare circa giornaliere o due!» ,
«flere ting å tenke på hver dag eller to!» ,
«Další věcí, přemýšlet o každý den nebo dva!» ,
«mehr über Spaß spät schönen» ,
«më vonë gjatë fun bukur» ,
«több mint szórakozás késő csodálatos kenyér»
);

$convert = array();
setlocale ( LC_CTYPE , ‘de_DE.UTF-8’ );
foreach( $strings as $string )
$convert [] = iconv ( ‘UTF-8’ , ‘ASCII//TRANSLIT//IGNORE’ , $string );
?>

Produces the following:

Array
(
[0] => mais coisas a pensar sobre diario ou dois!
[1] => plus de choses a penser a journalier ou a deux !
[2] => ?mas cosas a pensar en diario o dos!
[3] => piu cose da pensare circa giornaliere o due!
[4] => flere ting aa tenke paa hver dag eller to!
[5] => Dalsi veci, premyslet o kazdy den nebo dva!
[6] => mehr ueber Spass spaet schoenen
[7] => me vone gjate fun bukur
[8] => toebb mint szorakozas keso csodalatos kenyer
)

= array();
setlocale ( LC_CTYPE , ‘nl_NL.UTF-8’ );
foreach( $strings as $string )
$convert [] = iconv ( ‘UTF-8’ , ‘ASCII//TRANSLIT//IGNORE’ , $string );
?>

produces:
Array
(
[0] => mais coisas a pensar sobre di?rio ou dois!
[1] => plus de choses ? penser ? journalier ou ? deux !
[2] => ?m?s cosas a pensar en diario o dos!
[3] => pi? cose da pensare circa giornaliere o due!
[4] => flere ting ? tenke p? hver dag eller to!
[5] => Dal?? v?c?, p?em??let o ka?d? den nebo dva!
[6] => mehr ?ber Spass sp?t sch?nen
[7] => m? von? gjat? fun bukur
[8] => t?bb mint sz?rakoz?s k?s? csod?latos keny?r
)

This might be of interest when trying to convert utf-8 strings into ASCII suitable for URL’s, and such. this was never obvious for me since I’ve used locales for us and nl.

Last example for verifying UTF-8 has one little bug. If 10xxxxxx byte occurs alone i.e. not in multibyte char, then it is accepted although it is against UTF-8 rules. Make following replacement to repair it.

Replace
> // goto next char
with
> else <
return false; // 10xxxxxx occuring alone
> // goto next char

Another light way to detect character encoding:
function detect_encoding ( $string ) <
static $list = array( ‘utf-8’ , ‘windows-1251’ );

foreach ( $list as $item ) <
$sample = iconv ( $item , $item , $string );
if ( md5 ( $sample ) == md5 ( $string ))
return $item ;
>
return null ;
>
?>

function isUTF8($str) <
if ($str === mb_convert_encoding(mb_convert_encoding($str, «UTF-32», «UTF-8»), «UTF-8», «UTF-32»)) <
return true;
> else <
return false;
>
>

Читайте также:  Windows 10 настройка игрового руля
Оцените статью