首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清理mysql搜索字符串的函数(主要是删除通配符)?

问清理mysql搜索字符串的函数(主要是删除通配符)?
EN

Stack Overflow用户
提问于 2011-08-16 23:37:53
回答 2查看 1.7K关注 0票数 1

有没有内置的php (或MySQL)函数可以过滤搜索中使用的字符串?在本例中,我希望在将字符串传递到MySQL正则表达式之前,只生成一个字符串字母表(大写和小写)。

我使用的是PDO和参数化查询,所以我不担心SQL注入。但是,我希望确保有人不会传入通配符并占用太多内存。到目前为止,这就是我用来删除除空格和字母表之外的所有内容的方法。这足够了吗?

代码语言:javascript
复制
preg_replace("/[^A-Za-z\s\s+]/", "", $query);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-17 00:04:31

您拥有的正则表达式将剥离的不仅仅是您担心的通配符,所以我认为这不是最好的解决方案。(您一定听说过this quote,但我还是要重复一遍。)

有些人在遇到问题时会想:“我知道,我会使用正则表达式。”

现在他们有两个问题。

有一些内置的PHP函数可以帮助您进行过滤。如果您想做一些事情,比如清理网址或电子邮件,请看一下将filter_var()与PHP's sanitize filters结合使用。

但是,在您的情况下,我认为以下是最简单的。

代码语言:javascript
复制
// Are there any I missed?
$keys = array("?", "%");  
$sanitized = str_replace($keys, "", $query);
票数 2
EN

Stack Overflow用户

发布于 2011-08-16 23:44:59

为什么不简单地删除%和?呢?从内存的角度来看,这些是重要的通配符。从长远来看,这将为您提供最大的可扩展性,而不会为以后的开发人员带来WTF??!的另一种可能性?

就此而言,您可以通过避免LIKE来完全避开这个问题,但这可能是不可能的。

如果您必须比这更有选择性,那么我会排除所有[^\w\s]+。您不想排除数字,允许使用-和_也没什么坏处。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7080900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档