Турецкая проблема с символами в PHP и MySQL

Я пытаюсь подсчитать количество всех букв турецкого алфавита в базе данных 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 ç кодируется как два байта (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))), проверьте свою БД и настройки соединения (см. связанную ветку).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]