PHP中substr截取波斯语字符串出现乱码问号的问题求助
解决PHP中substr处理波斯语字符串出现乱码问号的问题
这问题我之前也碰到过!核心原因很简单:substr()是按字节来切割字符串的,但波斯语属于UTF-8编码的多字节字符,每个字符通常占2到4个字节。你写的substr($a,0,10)是截取前10个字节,这刚好把一个完整的波斯语字符劈成了不完整的片段,系统识别不了就显示成�了。
直接给你解决方案:用PHP的mb_substr()函数替代substr(),它专门用来处理多字节编码的字符串,是按字符数而不是字节数来截取的。
修改后的代码如下:
$a = 'حروف فارسی برای امتحان'; echo mb_substr($a, 0, 10);
额外提两个注意点:
- 确保你的PHP环境启用了
mbstring扩展(大部分服务器默认都开了,如果没开,去php.ini里把extension=mbstring这行注释去掉就行)。 - 为了避免环境编码不一致的坑,最好显式指定编码参数,更稳妥:
echo mb_substr($a, 0, 10, 'UTF-8');
这样运行后就能得到前10个完整的波斯语字符,不会再出现乱码问号啦。
内容的提问来源于stack exchange,提问作者Gulmuhammad Akbari
相关产品推荐
相关产品推荐

