我正在尝试计算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);
如何修复土耳其字符的代码?感谢。
答案 0 :(得分: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))
),请检查您的数据库和连接设置(请参阅链接的线程)。