Файл: sys/fnc/utf8_convert_case.php
Строк: 35
<?php
function utf8_convert_case($s, $mode) {
#таблица конвертации регистра
static $trans = array(
#CASE_UPPER => CASE_LOWER
#en (английский латиница)
"x41" => "x61", #a
"x42" => "x62", #b
"x43" => "x63", #c
"x44" => "x64", #d
"x45" => "x65", #e
"x46" => "x66", #f
"x47" => "x67", #g
"x48" => "x68", #h
"x49" => "x69", #i
"x4a" => "x6a", #j
"x4b" => "x6b", #k
"x4c" => "x6c", #l
"x4d" => "x6d", #m
"x4e" => "x6e", #n
"x4f" => "x6f", #o
"x50" => "x70", #p
"x51" => "x71", #q
"x52" => "x72", #r
"x53" => "x73", #s
"x54" => "x74", #t
"x55" => "x75", #u
"x57" => "x77", #w
"x56" => "x76", #v
"x58" => "x78", #x
"x59" => "x79", #y
"x5a" => "x7a", #z
#ru (русский кириллица)
"xd0x81" => "xd1x91", #ё
"xd0x90" => "xd0xb0", #а
"xd0x91" => "xd0xb1", #б
"xd0x92" => "xd0xb2", #в
"xd0x93" => "xd0xb3", #г
"xd0x94" => "xd0xb4", #д
"xd0x95" => "xd0xb5", #е
"xd0x96" => "xd0xb6", #ж
"xd0x97" => "xd0xb7", #з
"xd0x98" => "xd0xb8", #и
"xd0x99" => "xd0xb9", #й
"xd0x9a" => "xd0xba", #к
"xd0x9b" => "xd0xbb", #л
"xd0x9c" => "xd0xbc", #м
"xd0x9d" => "xd0xbd", #н
"xd0x9e" => "xd0xbe", #о
"xd0x9f" => "xd0xbf", #п
"xd0xa0" => "xd1x80", #р
"xd0xa1" => "xd1x81", #с
"xd0xa2" => "xd1x82", #т
"xd0xa3" => "xd1x83", #у
"xd0xa4" => "xd1x84", #ф
"xd0xa5" => "xd1x85", #х
"xd0xa6" => "xd1x86", #ц
"xd0xa7" => "xd1x87", #ч
"xd0xa8" => "xd1x88", #ш
"xd0xa9" => "xd1x89", #щ
"xd0xaa" => "xd1x8a", #ъ
"xd0xab" => "xd1x8b", #ы
"xd0xac" => "xd1x8c", #ь
"xd0xad" => "xd1x8d", #э
"xd0xae" => "xd1x8e", #ю
"xd0xaf" => "xd1x8f", #я
#tt (татарский, башкирский кириллица)
"xd2x96" => "xd2x97", #ж с хвостиком Җ => җ
"xd2xa2" => "xd2xa3", #н с хвостиком Ң => ң
"xd2xae" => "xd2xaf", #y Ү => ү
"xd2xba" => "xd2xbb", #h мягкое Һ => һ
"xd3x98" => "xd3x99", #э Ә => ә
"xd3xa8" => "xd3xa9", #o перечеркнутое Ө => ө
#uk (украинский кириллица)
"xd2x90" => "xd2x91", #г с хвостиком
"xd0x84" => "xd1x94", #э зеркальное отражение
"xd0x86" => "xd1x96", #и с одной точкой
"xd0x87" => "xd1x97", #и с двумя точками
#be (белорусский кириллица)
"xd0x8e" => "xd1x9e", #у с подковой над буквой
#tr,de,es (турецкий, немецкий, испанский, французский латиница)
"xc3x84" => "xc3xa4", #a умляут Ä => ä (турецкий)
"xc3x87" => "xc3xa7", #c с хвостиком Ç => ç (турецкий, французский)
"xc3x91" => "xc3xb1", #n с тильдой Ñ => ñ (турецкий, испанский)
"xc3x96" => "xc3xb6", #o умляут Ö => ö (турецкий)
"xc3x9c" => "xc3xbc", #u умляут Ü => ü (турецкий, французский)
"xc4x9e" => "xc4x9f", #g умляут Ğ => ğ (турецкий)
"xc4xb0" => "xc4xb1", #i c точкой и без İ => ı (турецкий)
"xc5x9e" => "xc5x9f", #s с хвостиком Ş => ş (турецкий)
#hr (хорватский латиница)
"xc4x8c" => "xc4x8d", #c с подковой над буквой
"xc4x86" => "xc4x87", #c с ударением
"xc4x90" => "xc4x91", #d перечеркнутое
"xc5xa0" => "xc5xa1", #s с подковой над буквой
"xc5xbd" => "xc5xbe", #z с подковой над буквой
#fr (французский латиница)
"xc3x80" => "xc3xa0", #a с ударением в др. сторону
"xc3x82" => "xc3xa2", #a с крышкой
"xc3x86" => "xc3xa6", #ae совмещенное
"xc3x88" => "xc3xa8", #e с ударением в др. сторону
"xc3x89" => "xc3xa9", #e с ударением
"xc3x8a" => "xc3xaa", #e с крышкой
"xc3x8b" => "xc3xab", #ё
"xc3x8e" => "xc3xae", #i с крышкой
"xc3x8f" => "xc3xaf", #i умляут
"xc3x94" => "xc3xb4", #o с крышкой
"xc5x92" => "xc5x93", #ce совмещенное
"xc3x99" => "xc3xb9", #u с ударением в др. сторону
"xc3x9b" => "xc3xbb", #u с крышкой
"xc5xb8" => "xc3xbf", #y умляут
#xx (другой язык)
#"" => "", #
);
#d($trans);
#вариант с str_replace() должен работать быстрее, чем с strtr()
if ($mode == CASE_UPPER) {
if (function_exists('mb_strtoupper')) {
return mb_strtoupper($s, 'utf-8');
}
if (preg_match('/^[x00-x7e]*$/', $s)) {
return strtoupper($s);
}
#может, так быстрее? (:TODO:)
strtr($s, array_flip($trans));
#$s = str_replace(array_values($trans), array_keys($trans), $s);
} elseif ($mode == CASE_LOWER) {
if (function_exists('mb_strtolower')) {
return mb_strtolower($s, 'utf-8');
}
if (preg_match('/^[x00-x7e]*$/', $s)) {
return strtolower($s);
}
#может, так быстрее? (:TODO:)
strtr($s, $trans);
#$s = str_replace(array_keys($trans), array_values($trans), $s);
} else {
trigger_error('Parameter 2 should be a constant of CASE_LOWER or CASE_UPPER!', E_USER_WARNING);
return $s;
}
return $s;
}
function utf8_lowercase($s) {
return utf8_convert_case($s, CASE_LOWER);
}
function utf8_uppercase($s) {
return utf8_convert_case($s, CASE_UPPER);
}