PHP рдореЗрдВ рдкрд╛рда рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ - рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдФрд░ рдПрдХ рдФрд░ рдмрд╛рдЗрдХ

рдПрдХ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ - рдкреГрд╖реНрда / рдкрд╛рда / рдХреБрдЫ рднреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдСрдЯреЛ-рдбрд┐рдЯреЗрдХреНрд╢рдиред рдХрд╛рд░реНрдп рдирдпрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рд╣реИред рд▓реЗрдЦ рдореЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЬреЛ рдХреБрдЫ рднреА рдорд┐рд▓рд╛ рдерд╛, рдЙрд╕рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЕрд╡рд▓реЛрдХрди - рдореЗрд░реЗ рдЦреБрдж рдХреЗ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдПрдХ рдпреЛрдЧреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИред



1. mb_detect_encoding () рдХреНрдпреЛрдВ рдирд╣реАрдВ?



рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рдЖрдЗрдП рджреЗрдЦреЗрдВ:

//   -     CP1251 $string = iconv('UTF-8', 'Windows-1251', '    ,   ,       ,     .'); // ,    md_detect_encoding().  $strict = FALSE var_dump(mb_detect_encoding($string, array('UTF-8'))); // UTF-8 var_dump(mb_detect_encoding($string, array('UTF-8', 'Windows-1251'))); // Windows-1251 var_dump(mb_detect_encoding($string, array('UTF-8', 'KOI8-R'))); // KOI8-R var_dump(mb_detect_encoding($string, array('UTF-8', 'Windows-1251', 'KOI8-R'))); // FALSE var_dump(mb_detect_encoding($string, array('UTF-8', 'ISO-8859-5'))); // ISO-8859-5 var_dump(mb_detect_encoding($string, array('UTF-8', 'Windows-1251', 'KOI8-R', 'ISO-8859-5'))); // ISO-8859-5 //  $strict = TRUE var_dump(mb_detect_encoding($string, array('UTF-8'), TRUE)); // FALSE var_dump(mb_detect_encoding($string, array('UTF-8', 'Windows-1251'), TRUE)); // FALSE var_dump(mb_detect_encoding($string, array('UTF-8', 'KOI8-R'), TRUE)); // FALSE var_dump(mb_detect_encoding($string, array('UTF-8', 'Windows-1251', 'KOI8-R'), TRUE)); // FALSE var_dump(mb_detect_encoding($string, array('UTF-8', 'ISO-8859-5'), TRUE)); // ISO-8859-5 var_dump(mb_detect_encoding($string, array('UTF-8', 'Windows-1251', 'KOI8-R', 'ISO-8859-5'), TRUE)); // ISO-8859-5
      
      





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдкреВрд░реНрдг рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рдЬрдм рд╣рдо рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рдХреНрдпреЛрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ? рд╕рд╣реА рд╣реИ, рдЧреВрдЧрд▓ред рдЕрджреНрднреБрдд рдЙрддреНрддрд░ рдорд┐рд▓рд╛ред



рдЕрдВрддрддрдГ mb_detect_encoding () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рднреА рдЖрд╢рд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ mbstring рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕реНрд░реЛрдд рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ, рд╣рдорд╛рд░реА рдЖрд╕реНрддреАрди рдКрдкрд░ рд▓реБрдврд╝рдХрд╛, рдЪрд▓рд╛ рдЧрдпрд╛:

 // ext/mbstring/mbstring.c:2629 PHP_FUNCTION(mb_detect_encoding) { ... //  2703 ret = mbfl_identify_encoding_name(&string, elist, size, strict); ...
      
      





Ctrl + рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

 // ext/mbstring/libmbfl/mbfl/mbfilter.c:643 const char* mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict) { const mbfl_encoding *encoding; encoding = mbfl_identify_encoding(string, elist, elistsz, strict); ...
      
      





Ctrl + рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

 // ext/mbstring/libmbfl/mbfl/mbfilter.c:557 /* * identify encoding */ const mbfl_encoding * mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict) { ...
      
      





рдореИрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рддрд╛рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд░реВрдВред рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрдк рдХреЛ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рд╣рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░ 593 рд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪрд░рд┐рддреНрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ:

 // ext/mbstring/libmbfl/mbfl/mbfilter.c:593 (*filter->filter_function)(*p, filter); if (filter->flag) { bad++; }
      
      





рдпрд╣рд╛рдВ рд╕рд┐рдВрдЧрд▓-рдмрд╛рдЗрдЯ рд╕рд┐рд░рд┐рд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдлрд╝рд┐рд▓реНрдЯрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:



Windows-1251 (рдореВрд▓ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╕рд╣реЗрдЬреА рдЧрдИрдВ)

 // ext/mbstring/libmbfl/filters/mbfilter_cp1251.c:142 /* all of this is so ugly now! */ static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter) { if (c >= 0x80 && c < 0xff) filter->flag = 0; else filter->flag = 1; /* not it */ return c; }
      
      







рдХреЗрдУрдЖрдИ8-рдЖрд░

 // ext/mbstring/libmbfl/filters/mbfilter_koi8r.c:142 static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter) { if (c >= 0x80 && c < 0xff) filter->flag = 0; else filter->flag = 1; /* not it */ return c; }
      
      







ISO-8859-5 (рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдордЬреЗрджрд╛рд░ рд╣реИ)

 // ext/mbstring/libmbfl/mbfl/mbfl_ident.c:248 int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter) { return c; }
      
      





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, ISO-8859-5 рд╣рдореЗрд╢рд╛ TRUE рджреЗрддрд╛ рд╣реИ (FALSE рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛-> рдЭрдВрдбрд╛ = 1)ред



рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рджреЗрдЦрд╛, рддреЛ рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛ред KOI8-R рд╕реЗ CP1251 рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдИрдПрд╕рдУ-8859-5 рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдЧрд░ рдПрдирдХреЛрдбрд┐рдВрдЧ рдХреА рд╕реВрдЪреА рд╣реИ - рддреЛ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рд╕рдЪ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрд╕рдлрд▓ред рдпрд╣ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ - рдХреЗрд╡рд▓ рдЪрд░рд┐рддреНрд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреЛрдб рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддреЗ рд╣реИрдВред



2. Google рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ



рдФрд░ Google рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рджреБрдЦреЛрдВ рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рднреА рд╕реНрд░реЛрдд рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ (http: // рдХреЗ рдмрд╛рдж рд╕реНрдерд╛рди рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреИрд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдП):



http: // deer.org.ua/2009/10/06/1/

http: // php.su/forum/topic.php?forum=1&topic=1346



3. рд╣рдм рдкрд░ рдЦреЛрдЬреЗрдВ



1) рдлрд┐рд░ рд╕реЗ рдЪрд░рд┐рддреНрд░ рдХреЛрдб: habrahabr.ru/blogs/php/27378/#comment_710532



2) рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди: habrahabr.ru/blogs/php/27378/#comment_1399654

рд▓рд┐рдВрдХ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡рд┐рдкрдХреНрд╖ рдФрд░ рдкреЗрд╢реЗрд╡рд░реЛрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдорд╛рдзрд╛рди рдирд┐рд░рд░реНрдердХ рд╣реИ - рдпрд╣ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред рдЗрд╕рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реИ)ред



4. рджрд░рдЕрд╕рд▓, рдореЗрд░рд╛ рдлреИрд╕рд▓рд╛



рдЕрдВрддрд┐рдо рдЦрдВрдб рд╕реЗ рджреВрд╕рд░рд╛ рд▓рд┐рдВрдХ рджреЗрдЦрддреЗ рд╕рдордп рд╡рд┐рдЪрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реБрдЖред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ: рд╣рдо рдПрдХ рдмрдбрд╝реЗ рд░реВрд╕реА рдкрд╛рда рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рд╡рд┐рднрд┐рдиреНрди рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ, рд╣рдо рдЗрди рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдкреВрдВрдЬреА рдФрд░ рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдкрддреНрд░ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ (рдЗрд╕реЗ "рд╕реНрдкреЗрдХреНрдЯреНрд░рдо" рдХрд╣рддреЗ рд╣реИрдВ), рджреЛрдиреЛрдВ рдХреЗрд╕-рд╕рдВрд╡реЗрджреА рдФрд░ рдмрд┐рдирд╛ (рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╣реА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝рд╛ рдЕрдХреНрд╖рд░ рднреА рдЬреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛)ред рдЗрди "рд╕реНрдкреЗрдХреНрдЯреНрд░рд╛" рдореЗрдВ, 0.001 рдФрд░ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рдХрдо рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рд╕рднреА рдкрддреНрд░реЛрдВ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреБрджреНрдз рдФрд░ рд╢рд╛рдВрддрд┐ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛ рд╣реИ:



рдХреЗрд╕-рд╕рдВрд╡реЗрджреА "рд╕реНрдкреЗрдХреНрдЯреНрд░рдо":

 array ( '' => 0.095249209893009, '' => 0.06836817536026, '' => 0.067481298384992, '' => 0.055995027400041, '' => 0.052242744063325, .... '' => 0.002252892226507, '' => 0.0021318391371162, '' => 0.0018574762967903, '' => 0.0015961610948418, '' => 0.0014044332975731, '' => 0.0013188987793209, '' => 0.0012623590130186, '' => 0.0011804488387602, '' => 0.001061932790165, )
      
      







рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓:

 array ( '' => 0.095249209893009, '' => 0.095249209893009, '' => 0.06836817536026, '' => 0.06836817536026, '' => 0.067481298384992, '' => 0.067481298384992, '' => 0.055995027400041, '' => 0.055995027400041, .... '' => 0.0029893589260344, '' => 0.0029893589260344, '' => 0.0024649163501406, '' => 0.0024649163501406, '' => 0.002252892226507, '' => 0.002252892226507, '' => 0.0015961610948418, '' => 0.0015961610948418, )
      
      







рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдирдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╕реНрдкреЗрдХреНрдЯреНрд░рд╛ (рд╕рд░рдгреА рдХреБрдВрдЬреА - рд╕рдВрдмрдВрдзрд┐рдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдгреЛрдВ рдХреЗ рдХреЛрдб):



Windows-1251: рдХреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ , рдХреЗрд╕ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓

KOI8-R: рдХреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ , рдХреЗрд╕ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓

рдЖрдИрдПрд╕рдУ-8859-5: рдХреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ , рдХреЗрд╕ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓



рдЕрдЧрд▓рд╛ред рд╣рдо рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдкрд╛рда рд▓реЗрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рд╣рдо рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдг рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ "рд░реЗрдЯрд┐рдВрдЧ" рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЙрдЪреНрдЪ рд░реЗрдЯрд┐рдВрдЧ рд╡рд╛рд▓рд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдкрд╛рда рдХрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧред



 $encodings = array( 'cp1251' => require 'specter_cp1251.php', 'koi8r' => require 'specter_koi8r.php', 'iso88595' => require 'specter_iso88595.php' ); $enc_rates = array(); for ($i = 0; $i < len($str); ++$i) { foreach ($encodings as $encoding => $char_specter) { $enc_rates[$encoding] += $char_specter[ord($str[$i])]; } } var_dump($enc_rates);
      
      





рдЗрд╕ рдХреЛрдб рдХреЛ рдШрд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рднреА рди рдХрд░реЗрдВ - рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рдЫрджреНрдо рд╕рдВрд╣рд┐рддрд╛ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ - рдореИрдВрдиреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рд▓реЗрдЦ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд░ рд╕рдХреВрдВред $ char_specter рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ pastebin рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдЙрди рд╕рд░рдгрд┐рдпреЛрдВ рд╣реИрдВред



рдкрд░рд┐рдгрд╛рдо


рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ - рдкрд╛рда рдПрдиреНрдХреЛрдбрд┐рдВрдЧ; рдХреЙрд▓рдо - $ enc_rates рд╕рд░рдгреА рдХреА рд╕рд╛рдордЧреНрд░реАред



1) $ str = 'рд░реВрд╕реА рдкрд╛рда';

cp1251 | koi8r | iso88595 |

0.441 | 0.020 | 0.085 | Windows-1251

0.049 | 0.441 | 0.166 | KOI8-R

0.133 | 0.092 | 0.441 | ISO-8859-5







рд╕рдм рдХреБрдЫ рдорд╣рд╛рди рд╣реИред рдЕрд╕рд▓реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдмрд╛рдХреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 4 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реИ - рдпрд╣ рдЗрддрдиреЗ рдЫреЛрдЯреЗ рдкрд╛рда рдореЗрдВ рд╣реИред рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЧреНрд░рдВрдереЛрдВ рдкрд░, рдЕрдиреБрдкрд╛рдд рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред



2) $ str = 'рд▓рд╛рдЗрди рдХреИрдкрд╕реНрдореИрди рд░реВрд╕реА рдкрд╛рда';

cp1251 | koi8r | iso88595 |

0.013 | 0.705 | 0.331 | Windows-1251

0.649 | 0.013 | 0.201 | KOI8-R

0.007 | 0.392 | 0.013 | ISO-8859-5









-рдЙрдлрд╝ рдпреВ! рдкреВрд░рд╛ рджрд▓рд┐рдпрд╛ред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ CP1251 рдореЗрдВ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рдЖрдорддреМрд░ рдкрд░ KOI8-R рдореЗрдВ рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдбрд╝реЗ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо CP1251 рдореЗрдВ рд▓рд╛рдЗрди рдХреИрдк рдХреЛ KOI8-R рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдорд╛рдорд▓реЗ рдХреЛ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ ("рд╕реНрдкреЗрдХреНрдЯреНрд░рд╛" рдХреЗрд╕ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓)



1) $ str = 'рд░реВрд╕реА рдкрд╛рда';

cp1251 | koi8r | iso88595 |

0.477 | 0.342 | 0.085 | Windows-1251

0.315 | 0.477 | 0.207 | KOI8-R

0.216 | 0.321 | 0.477 | ISO-8859-5









2) $ str = 'рд▓рд╛рдЗрди рдХреИрдкрд╕реНрдореИрди рд░реВрд╕реА рдкрд╛рда';

cp1251 | koi8r | iso88595 |

1.074 | 0.705 | 0.465 | Windows-1251

0.649 | 1.074 | 0.201 | KOI8-R

0.331 | 0.392 | 1.074 | ISO-8859-5









рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╣реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗрд╕-рд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ "рд╕реНрдкреЗрдХреНрдЯреНрд░рд╛" (рдпрджрд┐ рд▓рд╛рдЗрди рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреИрдкрд┐рдЯрд▓ рд▓реЗрдЯрд░реНрд╕ рд╣реИрдВ) рдФрд░ рдХреЗрд╕-рдЗрдирд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рдХреЗ рд╕рд╛рде рджреЛрдиреЛрдВ рдХреЛ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдиреЗрддрд╛ рдЗрддрдирд╛ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЫреЛрдЯреА рд░реЗрдЦрд╛рдУрдВ рдкрд░ рднреА рдХрд╛рдлреА рд╕реНрдерд┐рд░ рд╣реИред рдЖрдк рдЕрдХреНрд╖рд░ рднрд╛рд░ рдХреЗ рд╕рд╛рде рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЧреИрд░-рд░реИрдЦрд┐рдХ рдмрдирд╛рдПрдВред



5. рдирд┐рд╖реНрдХрд░реНрд╖



рд╡рд┐рд╖рдп рдореЗрдВ, рдпреВрдЯреАрдПрдл -8 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХреЛрдИ рдореВрд▓рднреВрдд рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЪрд░рд┐рддреНрд░ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкрд╛рддреНрд░реЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рддреЛрдбрд╝рдирд╛ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ / рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛ред

рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рди рдХреЗрд╡рд▓ рд╕рд┐рд░рд┐рд▓рд┐рдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рддрдХ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ - рд╕рд╡рд╛рд▓ рдХреЗрд╡рд▓ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛рдУрдВ / рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ "рд╕реНрдкреЗрдХреНрдЯреНрд░рд╛" рдореЗрдВ рд╣реИред



PS рдпрджрд┐ рдпрд╣ рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХ / рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рддреЛ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЛ GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП "рд╕реНрдкреЗрдХреНрдЯреНрд░рдо" рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



UPDATED

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрджреНрднреБрдд рд╕рдорд╛рд░реЛрд╣ рдлрд┐рд╕рд▓ рдЧрдпрд╛, рдЬрд┐рд╕ рд▓рд┐рдВрдХ рдкрд░ рдореИрдВрдиреЗ рдХреЙрд▓рдо "рд╕реНрдХреНрд╡реЗрд▓рд░" рдХреЗ рддрд╣рдд рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╢рдмреНрджреЛрдВ рд╕реЗ рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реЛ рдЧрдП, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ - рд╡реЗ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рдВрдкрд╛рджрди рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред рдХрдерд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░рд╛рдзрд╛рд░ рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ 100% рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдХрдерд┐рдд рд▓реЗрдЦрдХ рдХрд╣рддреЗ рд╣реИрдВ ред

1) рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЗ "рд╕рд╛рдорд╛рдиреНрдп" рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреА? рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реА рд╕рд╛рдордЧреНрд░реА 100% рд╡реИрдз рд╣реИред

рдЙрддреНрддрд░: рд╣рд╛рдВ, рд╡реЗ рдХрд░реЗрдВрдЧреЗред

2) рдХреНрдпрд╛ рдпрд╣ рдпреВрдЯреАрдПрдл -8 рдФрд░ рдЧреИрд░-рдпреВрдЯреАрдПрдл -8 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛?

рдЙрддреНрддрд░: рдирд╣реАрдВ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред



рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:

 $str_cp1251 = iconv('UTF-8', 'Windows-1251', ' '); var_dump(md5($str_cp1251)); var_dump(md5(iconv('Windows-1251', 'Windows-1251', $str_cp1251))); var_dump(md5(iconv('KOI8-R', 'KOI8-R', $str_cp1251))); var_dump(md5(iconv('ISO-8859-5', 'ISO-8859-5', $str_cp1251))); var_dump(md5(iconv('UTF-8', 'UTF-8', $str_cp1251)));
      
      





рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реИ:

 m00t@m00t:~/workspace/test$ php detect_encoding.php string(32) "96e14d7add82668414ffbc498fcf2a4e" string(32) "96e14d7add82668414ffbc498fcf2a4e" string(32) "96e14d7add82668414ffbc498fcf2a4e" string(32) "96e14d7add82668414ffbc498fcf2a4e" PHP Notice: iconv(): Detected an illegal character in input string in /home/m00t/workspace/test/detect_encoding.php on line 36 PHP Stack trace: PHP 1. {main}() /home/m00t/workspace/test/detect_encoding.php:0 PHP 2. iconv() /home/m00t/workspace/test/detect_encoding.php:36 string(32) "d41d8cd98f00b204e9800998ecf8427e"
      
      





рд╣рдо рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ? Iconv ($ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, $ рдПрдиреНрдХреЛрдбрд┐рдЧ) рдХреЗ рдмрд╛рдж рд╕рд┐рдВрдЧрд▓-рдмрд╛рдЗрдЯ рд╕рд┐рд░рд┐рд▓рд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдирд╣реАрдВ рдмрджрд▓реЗрдЧреАред рдХреЗрд╡рд▓ UTF-8 рдХреЛ рдЧреИрд░-UTF-8 рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ - рд╡реЛрд░рд┐рдВрдЧ рдХреА рдХреАрдордд рдкрд░ред

IMHO, рдпрд╣ рдареАрдХ рдРрд╕реЗ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ PHP рдХреЛ "рдореВрд░реНрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (c) - рдХреИрд╕реЗ рд╡реЗ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡рд┐рд╖рдп рдореЗрдВ рдЯреНрд░реЛрд▓ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред



All Articles