Тема: Проблеми з українськими буквами у php

Привіт.
В мене виникла одна проблема, switch - не сприймає українських літер:

case "й":
$t_str=$t_str."i";
break;
case "ц":
$t_str=$t_str."c";
break;
case "у":
$t_str=$t_str."u";
break;    
case "к":
$t_str=$t_str."k";
break;
case "е":
$t_str=$t_str."e";
break;
case "н":
$t_str=$t_str."n";
break;

В результаті $t_str нічого не присвоюється, пробував ставити замість українських англійські, тоді все працює.

2

Re: Проблеми з українськими буквами у php

А що йде до switch?

У мене наприклад такий код нормально працює:

<?php


$t_str = '';

$letter = 'й';

switch($letter) {    
    case "й":
        $t_str=$t_str."i";
        break;
    case "ц":
        $t_str=$t_str."c";
        break;
    case "у":
        $t_str=$t_str."u";
        break;    
    case "к":
        $t_str=$t_str."k";
        break;
    case "е":
        $t_str=$t_str."e";
        break;
    case "н":
        $t_str=$t_str."n";
        break;
}

echo '<code><pre>';
var_dump($t_str);
echo '</pre></code>';

?>

3 Востаннє редагувалося Адріян Ігорович (20.07.2012 14:09:32)

Re: Проблеми з українськими буквами у php

Ось повністю скрипт.

<?php

$string = "Тест транслітераі";
$string=strtolower($string);
$t_str="";
for($i=0;$i<strlen($string);$i++)
{
$buff=$string[$i];
switch($buff)
{
case " ":
$t_str=$t_str."-";
break;
case "й":
$t_str=$t_str."i";
break;
case "ц":
$t_str=$t_str."c";
break;
case "у":
$t_str=$t_str."u";
break;    
case "к":
$t_str=$t_str."k";
break;
case "е":
$t_str=$t_str."e";
break;
case "н":
$t_str=$t_str."n";
break;
case "г":
$t_str=$t_str."g";
break;
case "ш":
$t_str=$t_str."sh";
break;
case "щ":
$t_str=$t_str."sch";
break;
case "з":
$t_str=$t_str."z";
break;
case "х":
$t_str=$t_str."h";
break;
case "ї":
$t_str=$t_str."ii";
break;    
case "ф":
$t_str=$t_str."f";
break;
case "і":
$t_str=$t_str."i";
break;
case "в":
$t_str=$t_str."v";
break;    
case "а":
$t_str=$t_str."a";
break;
case "п":
$t_str=$t_str."p";
break;
case "р":
$t_str=$t_str."r";
break;    
case "о":
$t_str=$t_str."o";
break;    
case "л":
$t_str=$t_str."l";
break;
case "д":
$t_str=$t_str."d";
break;
case "ж":
$t_str=$t_str."zh";
break;
case "є":
$t_str=$t_str."ye";
break;
case "я":
$t_str=$t_str."ja";
break;
case "ч":
$t_str=$t_str."ch";
break;
case "с":
$t_str=$t_str."s";
break;
case "м":
$t_str=$t_str."m";
break;
case "и":
$t_str=$t_str."y";
break;    
case "т":
$t_str=$t_str."t";
break;    
case "б":
$t_str=$t_str."b";
break;
case "ю":
$t_str=$t_str."ju";
break;
}
}
echo $t_str;
?>
Пробіли заміняє добре, а літери ні

4

Re: Проблеми з українськими буквами у php

Проблема з операцією [] в рядку $buff=$string[$i];
В php, ця операція повертає 1 байт, а в utf8 кирилиця 2 байти, тому в даному випадку так не можна зробити. Як варіант використовувати функцію substr.
Детальніше: http://php.net/manual/en/language.types.string.php
Приклад як краще робити транслітерацію

function makeAlias($name) {
        $cyr  = array('а','б','в','г','д','e','ж','з','и','й','к','л','м','н','о','п','р','с','т','у', 
        'ф','х','ц','ч','ш','щ','ъ','ь', 'ю','я','А','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У',
        'Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ь', 'Ю','Я' );
        $lat = array( 'a','b','v','g','d','e','zh','z','i','y','k','l','m','n','o','p','r','s','t','u',
        'f' ,'h' ,'ts' ,'ch','sh' ,'sht' ,'a' ,'y' ,'yu' ,'ya','A','B','V','G','D','E','Zh',
        'Z','I','Y','K','L','M','N','O','P','R','S','T','U',
        'F' ,'H' ,'Ts' ,'Ch','Sh' ,'Sht' ,'A' ,'Y' ,'Yu' ,'Ya' );
        $name = str_replace($cyr, $lat, $name);    
        $name = strtolower(trim($name));
        $name = preg_replace("%[ ()\[\]*&.,\"\'_\\/]+%i", "-", $name);
        if (strlen($name) > 245) {
            $name = substr($name, 0, 240);
        }     
        return $name;
    }

для російських літер правда.

Подякували: Адріян Ігорович1

Re: Проблеми з українськими буквами у php

Дякую за допомогу.