1

我正在尝试计算 MySQL 数据库中土耳其语字母表中所有字母的出现次数。

当我尝试像这样计算字母“a”时,我得到了正确的结果:

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

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

当我用“ç”替换“a”时,我得到零。我已经添加了这段代码:

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

如何修复土耳其字符的代码?谢谢。

4

1 回答 1

3

在 UTF-8ç中,编码为两个字节 ( C3 A7),因此无法进行逐字节比较。考虑substr_count

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

或使用这样的 unicode-aware 函数:

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)),请检查您的数据库和连接设置(请参阅链接的线程)。

于 2014-12-02T09:16:24.923 回答