【问题标题】:Escape user input for Regex parsing转义用户输入以进行正则表达式解析
【发布时间】:2014-09-23 08:08:01
【问题描述】:

我有一个网站,用户可以在其中从输入表单中搜索文本文件。该网站将搜索发布到执行shell_exec grep -E "^(LOG|DATE)+.$query" 类型命令的服务器。

日志文件包含特殊字符,如 `[( 并且如果用户希望应该能够搜索它们。

问题是某些字符“破坏”了 grep 函数。在处理数据或内置函数之前,是否有需要转义的字符列表? escapeshellarg 在这种情况下不起作用,我在网上找不到应该转义的字符列表

【问题讨论】:

  • 你为什么使用shell_exec?使用PHP内置的preg_match,并使用preg_quote对输入进行转义。
  • 文件很大,PHP 比 grep 慢很多
  • 您可以在调用escapeshellarg 之前尝试使用preg_quote。但由于 PHP 的正则表达式与 grep 的不一样,可能会有一些不兼容的地方。
  • @Barmar 是的,您的解决方案有效。我正在寻找的函数是 preg_quote。发布为答案,以便我可以 +rep 并接受。谢谢!
  • 已经有推荐preg_quote的答案了。

标签: php regex validation escaping


【解决方案1】:

由于您使用的是 PHP,请使用preg_match('/patern/', $str);
要为正则表达式转义字符串,请使用 preg_quote($str)

【讨论】:

  • preg_match 没有replacement 参数,即preg_replace
猜你喜欢
  • 1970-01-01
  • 2013-05-11
  • 2015-05-16
  • 2011-03-17
  • 1970-01-01
  • 2015-11-24
  • 2012-07-08
  • 2016-10-12
  • 1970-01-01
相关资源
最近更新 更多