2013-08-20 4 views
1

J'utilise MongoDB avec un pilote PHP et j'utilise un jeu de caractères turc. Mais quand j'essaie de faire correspondre des caractères turcs, il y a un problème.Correspondance des caractères UTF-8 (turc) avec PHP dans MongoDB

Par exemple, ma base de données comprend les valeurs suivantes:

  • İngiltere
  • İtalya
  • Şampiyona

Quand je leur recherche dans la base de données, il n'y a pas de résultat. Donne-moi un résultat vide car il ne correspond pas aux caractères turcs et il ne correspond pas automatiquement.

Que peut-on faire pour résoudre ce problème?

Répondre

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

Il n'y a pas de méthode find() sur la classe MongoDB. Est-ce que $database est une instance MongoCollection?

Vous rencontrez peut-être des problèmes avec le codage UTF-8 (voir: this answer pour une discussion connexe), mais les trois chaînes que vous avez partagées semblent être correctement codées. En utilisant des chaînes UTF-8, il ne devrait pas y avoir de problème d'insertion et d'interrogation avec lesdites valeurs. Prenons l'exemple de code suivant:

$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"; 
} 

Cela génère la sortie suivante sur mon système:

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

Je pense que mon problème est de mon insert. J'ai essayé votre code et cela a fonctionné. mais avec mes valeurs, ça ne marche pas. que devrais-je faire pour transformer mes valeurs utf-8 avant insertion? – user2396307

+0

je reçois mes données à partir de ce site: http://www.stats.betradar.com/s4/gismo.php?&html=1&id=1828&language=tr&clientid=35&child=1&childnodeid=1819 comment puis-je changer cet utf -8? pour résoudre mon problème? Merci pour la réponse – user2396307

+0

J'ai lié à http://stackoverflow.com/a/5920748/162228 dans ma réponse ci-dessus. Cela a une discussion sur les différentes façons d'encoder les chaînes en UTF-8 en PHP. – jmikola

Questions connexes