首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用iconv_strpos而不是strpos?

为什么使用iconv_strpos而不是strpos?
EN

Stack Overflow用户
提问于 2011-03-31 12:47:02
回答 2查看 744关注 0票数 2

与strpos()不同,iconv_strpos()的返回值是出现在针前的字符数,而不是指向已找到针的位置的字节偏移量。(资料来源:http://www.php.net/manual/en/function.iconv-strpos.php)

下面的代码示例显示iconv_strpos()strpos()返回相同的值。

代码语言:javascript
复制
$string = "dd.MM.yy";

echo "d: ".strpos($string, 'd'); // 0
echo "M: ".strpos($string, 'M'); // 3
echo "y: ".strpos($string, 'y'); // 6

echo "d: ".iconv_strpos($string, 'd'); // 0
echo "M: ".iconv_strpos($string, 'M'); // 3
echo "y: ".iconv_strpos($string, 'y'); // 6

为什么我要使用iconv_strpos而不是strpos?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-31 12:50:16

它通常只适用于使用多字节编码,如UTF-8或UTF-16.

一个字符可以由多个字节组成( UTF-8中的非7位ASCII字符就是这种情况--这些字符在编码长度上是可变的。UTF-16有2字节字符)。

票数 5
EN

Stack Overflow用户

发布于 2011-03-31 12:58:46

当您使用多字节编码时,单个字符可以用可变字节数表示(例如,在UTF-8中,从1到4)。这与单字节编码不同,在单字节编码中,每个字节总是精确地表示一个字符.

考虑一个用UTF-8编码的双字符字符串,其中第一个字符需要3个字节来表示,而第二个字符只占1个字符(序数<128个的所有字符都具有UTF-8中的这个属性,因此让我们使用'a'作为示例)。

在这种情况下,iconv_strpos($string, 'a')将返回1(第二个字符是'a'),而strpos($string, 'a')将返回3(指第四个字符,因为它不能判断前三个字节实际上只是一个字符;它假定编码是单字节的)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5500052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档