我在我的一个项目中使用Zend Framework,文件Zend/Uri/Http.php有一个函数validateQuery,它使用preg_match验证给定的查询。preg_match()检查一个很长的字符串时会失败默默无闻
它正常工作正常,但我有一个PayPal网址查询字符串,这是非常长,约1500字符和preg_match
功能失败默默地为此查询。
我正在使用PHP版本。 5.4.7因此我没有pcre.backtrack_limit = 100000的限制。
现在我已经修改了Zendframework中的文件,不验证超过1000个字符的任何查询,但这显然不是正确的解决方案。
下面的一条评论我试图在独立页面中使用preg_match的另一个非常长的查询,我有同样的错误,我粘贴我的测试数据以供参考。
$query = 'search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8&search?q=very+long+query+string+example&aq=f&oq=very+long+query+string+example&aqs=chrome.0.57j62l3.5553j0&sourceid=chrome&ie=UTF-8';
$pattern = "/^(?:%[[:xdigit:]]{2}|[A-Za-z0-9-_.!~*'()\[\];\/?:@&=+$,])*$/";
echo preg_match($pattern, $query);
也许有一个超时... – 2013-04-25 13:39:08
你应该向Zend报告这个问题,而不是(仅)在这里。因为正常的程序是与软件供应商讨论问题并在那里解决问题。 – hakre 2013-04-25 13:39:16
如果你只是在ZF之外自己运行'preg_match()',你是否也有同样的问题?如果是这样,你可以编辑你的问题,包括该例子? – 2013-04-25 13:40:53