在我的HTML页面中,用户输入一个搜索查询并通过GET
发送。在我的一些mongodb文档中,有些字段的值中包含'
。但当用户输入包含'
的查询时,不会返回任何结果。我还使用了PHP addslash
函数,但没有成功。我应该如何在find
函数中放置查询?
$col->find(['word' => new MongoRegex('/^' . addslashes($term) . '/i')];
我在两天前遇到了同样的问题,我已经使用下面的查询解决了它。
下面是我的解决方案。
SELECT *
FROM tags
WHERE `name` = 'limit''''s'
LIMIT 0 , 30
SEE HERE
尝试使用htmlentities
而不是addslashes
$col->find(['word' => new MongoRegex('/^' . htmlentities($term, ENT_QUOTES, 'UTF-8') . '/i')];
引用:mongodb 中单引号的正则表达式
JS shell似乎要求将'
转义为unicode 'x27
(请参阅:此答案),但PHP驱动程序不需要任何特殊处理。考虑以下示例:
$m = new MongoClient();
$c = $m->test->foo;
$c->drop();
$c->insert(['x'=>"foo'bar"]);
$c->insert(['x'=>"foobar"]);
$r = $c->find(['x' => new MongoRegex("/^foo'/i")]);
var_dump(iterator_to_array($r));
此查询仅匹配第一个文档,其中x
是foo'bar
。如果运行脚本,您应该会看到打印出来的文档。