有没有内置的php (或MySQL)函数可以过滤搜索中使用的字符串?在本例中,我希望在将字符串传递到MySQL正则表达式之前,只生成一个字符串字母表(大写和小写)。
我使用的是PDO和参数化查询,所以我不担心SQL注入。但是,我希望确保有人不会传入通配符并占用太多内存。到目前为止,这就是我用来删除除空格和字母表之外的所有内容的方法。这足够了吗?
preg_replace("/[^A-Za-z\s\s+]/", "", $query);发布于 2011-08-17 00:04:31
您拥有的正则表达式将剥离的不仅仅是您担心的通配符,所以我认为这不是最好的解决方案。(您一定听说过this quote,但我还是要重复一遍。)
有些人在遇到问题时会想:“我知道,我会使用正则表达式。”
现在他们有两个问题。
有一些内置的PHP函数可以帮助您进行过滤。如果您想做一些事情,比如清理网址或电子邮件,请看一下将filter_var()与PHP's sanitize filters结合使用。
但是,在您的情况下,我认为以下是最简单的。
// Are there any I missed?
$keys = array("?", "%");
$sanitized = str_replace($keys, "", $query);发布于 2011-08-16 23:44:59
为什么不简单地删除%和?呢?从内存的角度来看,这些是重要的通配符。从长远来看,这将为您提供最大的可扩展性,而不会为以后的开发人员带来WTF??!的另一种可能性?
就此而言,您可以通过避免LIKE来完全避开这个问题,但这可能是不可能的。
如果您必须比这更有选择性,那么我会排除所有[^\w\s]+。您不想排除数字,允许使用-和_也没什么坏处。
https://stackoverflow.com/questions/7080900
复制相似问题