关于strpos函数的一些疑问

本文探讨了使用strpos函数在中文字符串中查找子串位置时遇到的问题及原因,主要涉及字符编码不一致导致的结果偏差,并提供了几种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间在群里有个网友问了这样一个问题。

请问:

echo strpos("非工",'枪');
输出是1还是0?

当时我想也没想就说是0,后来结果却是1

因为我原来看过PW程序的相关的应用 找到了这段类似的代码:

if (strpos("非工", '枪') !== false) {
	echo 'yes~';
}
结果也返回 'yes~'

我翻了一下手册,上面这么说:

strpos() 函数返回字符串在另一个字符串中第一次出现的位置。

如果没有找到该字符串,则返回 false。


继续找,在网上看到了相关的回复:

是字符编码的问题,php源文件编码跟网站是否一致,提示最好使用mbstring或者iconv,strxxx处理gbk编码的中文可能会有问题

同时还有几下的解决办法:

PHP文件的编码肯定不是UTF-8.解决办法有以下几种:

  • 文件另存为UTF-8编码
  • “首”字mb_convert_encoding成UTF-8(具体针对的是$pos = mb_strpos($tmp_content,"首",1,'utf-8');这个代码)
  • file_get_contents的内容转换成GBK再strpos
来自:http://bbs.phpchina.com/thread-231248-1-1.html

简单来说呢其实就是两个问题,一个是文件编码问题,一个是具体的函数参数的编码问题,注意到这两点就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值