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() 函数在参数有多个字符时只使用第一个字符。因此,它找到了 "中" 字符在 "个族啊" 中的位置。