2014-12-02 66 views
1

我试图计算MySQL数据库中土耳其字母表中所有字母的出现次数。PHP和MySQL中的土耳其字符问题

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

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

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

当我将“A”,以“C”我得到零。 我已将此代码:

$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 2014-12-02 09:05:38

+0

什么['collat​​ion'](https: //dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html)你在DB中使用吗? – mudasobwa 2014-12-02 09:05:50

+3

'strlen()'按字节方式工作,而不是按字符方式。 UTF-8中的'ç'需要多于1个字节。改用'mb_strlen()'。同样,你不能在字符串中使用每个字节的'[]'。 – AmigoJack 2014-12-02 09:07:19

回答

3

在UTF-8中ç被编码为两个字节(C3 A7),因此逐字节比较将不起作用。考虑substr_count

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

或使用unicode的功能是这样的:

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