2013-08-20 75 views
1

我正在使用MongoDB和PHP驅動程序,我使用的是土耳其語字符集。 但是,當我嘗試匹配土耳其字符時,出現問題。在MongoDB中用PHP匹配UTF-8字符(土耳其語)

例如,我的數據庫包括以下值:

  • İngiltere
  • İtalya
  • Şampiyona

當我搜索他們的數據庫沒有結果。

$database->find(array('value'=>'İngiltere')); 

給我空結果,因爲它與土耳其字符不匹配,並且它不自動匹配。

可以做些什麼來解決這個問題?

回答

0
$database->find(array('value'=>'İngiltere')); 

上有MongoDB類沒有find()方法。是$database a MongoCollection實例嗎?

您可能會遇到UTF-8編碼問題(請參閱:this answer進行相關討論),但共享的所有三個字符串似乎都已正確編碼。使用UTF-8字符串時,不應該插入和查詢所述值。考慮下面的代碼示例:

$values = ['İngiltere', 'İtalya', 'Şampiyona']; 

$m = new MongoClient(); 
$c = $m->test->foo; 
$c->drop(); 

foreach ($values as $value) { 
    printf("Testing value: %s\n", $value); 
    printf("Detected encoding: %s\n", mb_detect_encoding($value)); 

    $c->insert(['x' => $value]); 
    var_dump($c->findOne(['x' => $value])); 
    echo "\n"; 
} 

這會產生在我的系統上的輸出如下:

Testing value: İngiltere 
Detected encoding: UTF-8 
array(2) { 
    '_id' => 
    class MongoId#6 (1) { 
    public $$id => 
    string(24) "5213d027e84df17727ca7985" 
    } 
    'x' => 
    string(10) "İngiltere" 
} 

Testing value: İtalya 
Detected encoding: UTF-8 
array(2) { 
    '_id' => 
    class MongoId#5 (1) { 
    public $$id => 
    string(24) "5213d027e84df17727ca7986" 
    } 
    'x' => 
    string(7) "İtalya" 
} 

Testing value: Şampiyona 
Detected encoding: UTF-8 
array(2) { 
    '_id' => 
    class MongoId#4 (1) { 
    public $$id => 
    string(24) "5213d027e84df17727ca7987" 
    } 
    'x' => 
    string(10) "Şampiyona" 
} 
+0

我想我的問題是關於我的插入。我試過你的代碼,它工作。但用我的價值觀,這是行不通的。 在插入之前,我應該如何轉換我的值utf-8? – user2396307

+0

我從本站獲取數據:http://www.stats.betradar.com/s4/gismo.php?&html=1&id=1828&language=tr&clientid=35&child=1&childnodeid=1819 我該如何更改此utf -8?解決我的問題? thx回答 – user2396307

+0

我在上面的回覆中鏈接到http://stackoverflow.com/a/5920748/162228。這裏有一些關於在PHP中將字符串編碼爲UTF-8的各種方法的討論。 – jmikola