警告:preg_replace():编译失败:字符类中的范围无效

时间:2014-09-21 08:46:12

标签: php

我在执行preg_replace时收到PHP错误。

警告:preg_replace():编译失败: xxx / item.php 偏移24处的字符类无效范围 53

行# 53 就是这个..

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

基本上我试图省略除字母之外的所有字符。我做错了什么?有没有更好,更快/更好的方法呢?

在发布此处时尝试了几个答案,但没有一个有效。

由于

2 个答案:

答案 0 :(得分:3)

错误的原因是char pos 24处的破折号( - )被解释为范围标识符(例如,在0-9中表示0到9之间的任何数字字符)但是/白色空间无法解释作为有意义的范围。可能最好逃脱破折号或者可能将其移动到字符串的末尾。

使用白名单的建议可能是一种很好的做法,但如果在给定的白名单中允许使用短划线,则同样的错误也很容易发生。

答案 1 :(得分:2)

我会使用白名单而不是将字符列入黑名单。

/[^a-z]/i

这将匹配除... z

之外的所有字符