本人提出这个问题后,作者在最新的1.2.5版本中已经解决,更新到最新版本即可。
更新postviews plus插件后页面顶部出现:
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset
这个问题出现了很久了,以前一直不知道什么地方导致的,只能复制旧版本的处理方式过来覆盖。今天又查了下资料,终于找到问题所在。
因为机器人的user agent需要先在后台设置,然后程序才能判断当前的用户的user agent,是不是机器人范围之内的。
问题就处在我们填写的机器人(bot)user agent中包含一些正则的语法,必须要首先转义,但是作者只是转义了:/
在函数increment_views中,大约460行:
$regex = '/(' . str_replace('/', '\/', implode($views_options['botagent'], ')|(')) . ')/si';
而我填写的机器人user agent还有+!.等特殊字符,在使用?preg_match匹配时:
$bot = preg_match($regex, $useragent);
就会出现上边的警告。
解决这个问题现在变得简单了,转义就行了。
$botagents=implode($views_options['botagent'], ')|('); $botagents=str_replace('/', '\/',$botagents); $botagents=str_replace('+', '\+',$botagents); $botagents=str_replace('!', '\!',$botagents); $botagents=str_replace('.', '\.',$botagents); $regex = '/(' . $botagents . ')/si';
或者使用preg_quote:
$regex = '/(' . str_replace('/', '\/', preg_quote(implode($views_options['botagent'], ')|('))) . ')/si';
这样烦人的警告就没了,赶紧试试吧。
关键字: postviews preg-match
你好!
謝你為我發現了這樣的錯誤。
目前已經改採用 preg_quote 的修正法。
另外,你提到的採用 preg_quote 的修正法會有問題,會把區分 bot 用的 () 也一併跳脫,導致無法一次辨識多隻。目前我已經再度發布 1.2.5 的修正版!~
更感謝妳提供這麽好的插件!
发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论