Hello! 欢迎来到小浪资源网!


PHP strrchr()函数处理中文时,为何会出现意想不到的结果?


PHP strrchr()函数处理中文时,为何会出现意想不到的结果?

php 中 strrchr() 输出的内容解析

strrchr() 函数用于在字符串中找到指定字符最后一次出现的位置。当参数中包含中文时,其输出结果可能令人困惑。

示例 1:

$str1 = "今天不是下雨天,感觉不错哟,没下雨,,,啊"; $res1 = strrchr($str1, "下雨"); echo "$res1 <br />";

输出:

立即学习PHP免费学习笔记(深入)”;

下雨,,,啊

此输出符合预期,因为函数找到了字符串中 “下雨” 字符串的最后一个出现位置。

示例 2:

$str2 = "我爱你中国啊中国啊五十几个族啊"; $res2 = strrchr($str2, "中"); echo "$res2 <br />"; var_dump($res2);

输出:

立即学习PHP免费学习笔记(深入)”;

个族啊 string '个族啊' (length=9)

解释:

令人惊讶的是,输出的内容是 “个族啊”。这是因为 strrchr() 函数在处理包含中文的参数时,先使用 urlencode() 函数对参数进行编码。编码结果如下:

%E6%9C%89%E6%88%91%E7%88%B1%E4%B8%AD%E5%9B%BD%E5%95%8A%E4%B8%AD%E5%9B%BD%E5%95%8A%E4%BA%94%E5%8D%81%E4%BA%94%E5%8D%81%E6%97%8F%E5%95%8A

php 将此编码后的字符串视为三个字符,而 strrchr() 函数在参数有多个字符时只使用第一个字符。因此,它找到了 “中” 字符在 “个族啊” 中的位置。

相关阅读