是否有内置的php(或MySQL)函数可以清理要在搜索中使用的字符串?在这种情况下,我想在它传递到MySQL正则表达式之前,只创建一个字符串字母(上部和下部)。
我正在使用PDO和参数化查询,因此我并不担心SQL注入。但是,我想确保有人不通过通配符并耗尽太多内存。到目前为止,这是我用来删除除空格和字母表之外的所有内容。这够了吗?
preg_replace("/[^A-Za-z\s\s+]/", "", $query);
答案 0 :(得分:3)
为什么不简单地删除%
和?
?从记忆的角度来看,这些是通配符。从长远来看,这将为您提供最大的可扩展性,而不会为后来的开发人员带来WTF??!
的另一种潜力?
就此而言,您可以完全避免使用LIKE
来解决问题,但这可能是不可能的。
如果您必须更具选择性,那么我会排除所有[^\w\s]+
。您不想排除数字,允许-
和_
几乎没有什么害处。
答案 1 :(得分:2)
你所使用的正则表达式将不仅仅是你担心的通配符,所以我不认为这是最好的解决方案。 (你无疑听过this quote,但无论如何我都会重复。)
有些人在面对问题时会想“我知道,我会用 正则表达式。“
现在他们有两个问题。
内置的PHP函数可以帮助您进行过滤。如果您要执行清理URL或电子邮件等操作,请查看将filter_var()与PHP's sanitize filters结合使用。
但是,在您的情况下,我认为以下内容最简单。
// Are there any I missed?
$keys = array("?", "%");
$sanitized = str_replace($keys, "", $query);