2014-12-02 133 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)))檢查您的數據庫和連接設置(請參閱鏈接的線程)。