波斯马BOSSMA Information Technology

解决wordpress的postviews plus插件记录搜索引擎(bot)访问警告的问题

发布时间:2011年6月29日 / 分类:PHP, WordPress / 12,220 次浏览 / 评论

本人提出这个问题后,作者在最新的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';

这样烦人的警告就没了,赶紧试试吧。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《解决wordpress的postviews plus插件记录搜索引擎(bot)访问警告的问题

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

目前有2 条评论

  1. richer 0楼:

    你好!
    謝你為我發現了這樣的錯誤。
    目前已經改採用 preg_quote 的修正法。

    另外,你提到的採用 preg_quote 的修正法會有問題,會把區分 bot 用的 () 也一併跳脫,導致無法一次辨識多隻。目前我已經再度發布 1.2.5 的修正版!~

发表评论