我在执行preg_replace
时遇到一个PHP错误。
警告:preg_replace():编译失败:字符类中的无效范围,偏移量为xxx/item.php第53行中的24
第#53行是这个。。
$itemid = substr(trim(strtolower(preg_replace('/[0-9_%:[(&#@!~*).]\/-s+]/','',$rsstitle))), 0, 8);
基本上,我试图省略除字母以外的所有字符。我做错了什么?有什么更好、更快/更好的方法吗?
在发布这篇文章时,尝试了这里建议的几个答案,但都不起作用。
感谢
错误的原因是char pos 24处的破折号(-)被解释为范围标识符(例如,0-9表示0和9之间的任何数字字符),但/到空格不能被解释为有意义的范围。可能最好是转义破折号,或者可能将其移动到字符串的末尾。
使用白名单的建议可能是一种很好的做法,但如果短划线是给定白名单中允许的字符,那么同样的错误也可能很容易发生。
我会使用白名单而不是黑名单字符。
/[^a-z]/i
这将匹配除a…z