Вход Регистрация
Файл: 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", #ж с хвостиком    &#1174; => &#1175;
        
"xd2xa2" => "xd2xa3", #н с хвостиком    &#1186; => &#1187;
        
"xd2xae" => "xd2xaf", #y                &#1198; => &#1199;
        
"xd2xba" => "xd2xbb", #h мягкое         &#1210; => &#1211;
        
"xd3x98" => "xd3x99", #э                &#1240; => &#1241;
        
"xd3xa8" => "xd3xa9", #o перечеркнутое  &#1256; => &#1257;
        #uk (украинский кириллица)
        
"xd2x90" => "xd2x91", #г с хвостиком
        
"xd0x84" => "xd1x94", #э зеркальное отражение
        
"xd0x86" => "xd1x96", #и с одной точкой
        
"xd0x87" => "xd1x97", #и с двумя точками
        #be (белорусский кириллица)
        
"xd0x8e" => "xd1x9e", #у с подковой над буквой
        #tr,de,es (турецкий, немецкий, испанский, французский латиница)
        
"xc3x84" => "xc3xa4", #a умляут          &#196; => &#228;  (турецкий)
        
"xc3x87" => "xc3xa7", #c с хвостиком     &#199; => &#231;  (турецкий, французский)
        
"xc3x91" => "xc3xb1", #n с тильдой       &#209; => &#241;  (турецкий, испанский)
        
"xc3x96" => "xc3xb6", #o умляут          &#214; => &#246;  (турецкий)
        
"xc3x9c" => "xc3xbc", #u умляут          &#220; => &#252;  (турецкий, французский)
        
"xc4x9e" => "xc4x9f", #g умляут          &#286; => &#287;  (турецкий)
        
"xc4xb0" => "xc4xb1", #i c точкой и без  &#304; => &#305;  (турецкий)
        
"xc5x9e" => "xc5x9f", #s с хвостиком     &#350; => &#351;  (турецкий)
        #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);
}
Онлайн: 2
Реклама