我在我的一個項目中使用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