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