我在我的一个项目中使用 Zend Framework,并且文件 Zend/Uri/Http.php 有一个函数 validateQuery,它使用 preg_match 验证给定的查询。
它工作正常,但我有一个很长的 paypal url 查询字符串,大约 1 500 个字符,并且该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 );