2014-09-21 88 views
0

我在執行preg_replace時遇到PHP錯誤。警告:preg_replace():編譯失敗:字符類中的範圍無效

警告:的preg_replace():編譯失敗:無效範圍在字符類偏移量24 XXX/item.php上線

線#是這個..

$itemid = substr(trim(strtolower(preg_replace('/[0-9_%:\[(&#@!~*).\]\\/-\s+]/','',$rsstitle))), 0, 8); 

基本上我試圖省略除字母以外的所有字符。我做錯了什麼?有沒有更好,更快,更好的方法?

發佈這個時嘗試了幾個答案,但沒有人工作。

謝謝

回答

1

我會使用白名單而不是黑名單字符。

/[^a-z]/i 

這將匹配的所有字符除了A ... Z

+0

謝謝..這工作。 :) – Abhik 2014-09-21 08:53:26

2

的原因的錯誤是破折號( - )在炭POS 24被解釋爲一個範圍標識符(例如,如在0-9裝置0和9之間的任何數字字符),但/白空間不能被解釋爲有意義的範圍內。可能是最好的躲避破折號或可能將其移動到您的字符串的結尾。

使用白名單的建議可能是很好的做法,但如果破折號允許在一個給定的白名單中的字符可以很容易地發生同樣的錯誤。

相關問題