MongoDB PHP重音问题

时间:2013-08-14 14:33:48

标签: php mongodb

假设我已经使用PHP插入了以下文档(请注意“ó”。)

$dbs->insert(array('name' => 'televisión'));

在mongodb中,数据库服务器保存如下

{ "name" : "televisi��n" }

如果我按如下方式调用findOne方法,(注意ó)

$doc = $dbs->findOne(array('name'   => "televisión"));

它返回正确的值

[name] => televisión

直到这里一切都很好。

所以,想象一下,从php我需要确定文件televisión进入mongodb数据库,但是我从没有重音“ó”的URL中获取值,即电视,所以。

$doc = $dbs->findOne(array('name'   => "television"));

findOne方法返回null,因此不匹配文档。

有没有办法让这个不返回空值,并且无论重音如何都可以找到文件?

提前致谢!

1 个答案:

答案 0 :(得分:1)

  

在mongodb中,数据库服务器保存如下

     

{“name”:“televisi n”}

这可能是因为你的shell没有正确显示UTF-8。

至于:

  

有没有办法让这个不返回空值,并且无论重音如何都可以找到文件?

您可以使用新的文本搜索功能执行此操作:

<?php
$m = new MongoClient;
$d = $m->test;
$c = $d->so;

// Just dropping here to create a controlled output - no need to do this yourself.
$c->drop();

$c->ensureIndex(
    array( 'name' => 'text' ),
    array( 'default_language' => 'spanish' )
);

$c->insert( array('name' => 'televisión' ) );

$res = $d->command( array( 'text' => 'so', 'search' => 'television' ) );

var_dump( $res['results'] );
?>

哪个输出:

array(1) {
  [0] =>
  array(2) {
    'score' =>
    double(1)
    'obj' =>
    array(2) {
      '_id' =>
      class MongoId#6 (1) {
        ...
      }
      'name' =>
      string(11) "televisión"
    }
  }
}

要使文本搜索生效,您需要使用MongoDB 2.4.x,并且需要使用--setParameter textSearchEnabled=true标记专门启用它mongod或添加到您的代码中:

$d->command( array( 'setParameter' => 1, 'textSearchEnabled' => true ) );