与strpos()不同,iconv_strpos()的返回值是出现在针前的字符数,而不是指向已找到针的位置的字节偏移量。(资料来源:http://www.php.net/manual/en/function.iconv-strpos.php)
下面的代码示例显示iconv_strpos()和strpos()返回相同的值。
$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?
发布于 2011-03-31 12:50:16
它通常只适用于使用多字节编码,如UTF-8或UTF-16.
一个字符可以由多个字节组成( UTF-8中的非7位ASCII字符就是这种情况--这些字符在编码长度上是可变的。UTF-16有2字节字符)。
发布于 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(指第四个字符,因为它不能判断前三个字节实际上只是一个字符;它假定编码是单字节的)。
https://stackoverflow.com/questions/5500052
复制相似问题