2

与 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?

4

2 回答 2

5

它通常仅在使用 UTF-8 或 UTF-16 等多字节编码时才相关。

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

于 2011-03-31T12:50:16.440 回答
5

当您使用多字节编码时,单个字符可以由可变数量的字节表示(例如,在 UTF-8 中,从 1 到 4)。这与单字节编码形成对比,单字节编码中的每个字节总是只代表一个字符。

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

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

于 2011-03-31T12:58:46.197 回答