2014-12-02 7 views
1

Я пытаюсь подсчитать случаи всех букв в турецком алфавите в базе данных MySQL.Проблема турецкого символа в PHP и MySQL

Когда я пытаюсь считать букву «а», как это, я получаю правильный результат:

while($nt=mysql_fetch_array($rt)) 
{ 
    $mystring = $nt["word"]; 

    for($i = 0; $i < strlen($mystring) ; $i++) 
    { 
     if($mystring[$i] == 'a') 
     { 
      $a++; 
     } 
    } 
} 

Когда я заменить «а», с «С» я получаю ноль. Я уже добавил этот код:

$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("database unavailable"); 
mysql_set_charset('utf8', $bd); 

Как я могу исправить мой код для турецких символов? Благодарю.

+1

Возможный дубликат [UTF-8 на всем пути] (http://stackoverflow.com/questions/279170/utf-8-all-the-way-through) – vaso123

+0

Что ['collation'] (https: //dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html) вы используете в БД? – mudasobwa

+3

'strlen()' работает байт-мудрый, а не характерный. '' '' в UTF-8 требуется более 1 байт. Вместо этого используйте 'mb_strlen()'. Точно так же вы не можете использовать '[]' за байт в строке. – AmigoJack

ответ

3

В UTF-8 ç кодируется как два байта (C3 A7), поэтому сравнение по байтам не будет работать. Рассмотрим substr_count:

$s = "abçdeç"; 
print substr_count($s, 'ç'); // 2 

или использовать Юникод-функцию, как это:

function utf8_char_count($s) { 
    $count = []; 
    preg_match_all('~.~u', $s, $m); 
    foreach($m[0] as $c) 
     $count[$c] = isset($count[$c]) ? $count[$c] + 1 : 1; 
    return $count; 
} 

print_r(utf8_char_count('çAüθç')); // [ç] => 2 [A] => 1 [ü] => 1 [θ] => 1 

Это предполагает, что ваша строка фактически UTF-8, если это не так (подсказка: var_dump(rawurlencode($str))), проверьте настройки БД и подключения (см. связанный поток).