PHP strpos中文查找问题

7.2k 记录 , 3评论

在用PHP strpos函数查找字符串包含关系时,一直返回false。

如下2个字符串:

$a = '歪麦博客';
$b = '博客';

字符串$a是从网页获取的内容,字符串$b是从数据库读取的内容。

用PHP的字符查找函数strposstriposmb_strposmb_stripos都没能正确返回。

按理说:

$pos = strpos($a, $b);
$pos = mb_strpos($a, $b);

都应该返回数字4,(因为中文是双字节的),但实际都返回false

其原因是$a字符不是UTF-8字符集,需要转换。

所以,在有中文的场景,保险的做法就是先转换字符,再查找:

$pos = strpos(mb_convert_encoding($a, 'utf-8'), mb_convert_encoding($b, 'utf-8'));

这样就能正确返回4了。

 

3 条评论

啊啊 says: 回复

测试strpos返回6,mb_strpos返回2

says: 回复

如果 $a = ‘博客歪麦’; 则怎么都匹配不到 博主试过没 怎么破啊

天鹰 says:

应该是因为从0开始,所以需要强制比较===的吧

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

昵称 *