PHP字符编码转换库iconv的一个细节

先来看代码php

1 <?php
2 $charset = 'GBK';
3 $str = '中华人民共和国中华人民共和国中华人民共和国中华人民共和国';
4 $size = 17;
5 $str2 = iconv('UTF-8', $charset, $str);
6 $str3 = substr($str2, 0, $size);//.$str2;
7 $s = iconv($charset, 'UTF-8//IGNORE', $str3);
8 
9 var_dump($s);

这里GBK由于一个汉字字符算2个英文字符 因此当长度为17的时候 会有字符破损工具

通过转换UTF-8 而且忽略不合法字符的时候,结果居然是 false 和文档中说的忽略字符测试

返回值达不到预期效果,通过测试发现这种状况仅出如今末尾字符不合法的时候spa

当拼接其余字符的时候(第六行注释掉的部分去掉)返回是达到预期的命令行

在命令行下测试iconv工具code

命令以下blog

iconv -c -f gbk -t utf-8 input

input为 17长度的$str3输出的内容文档

结果iconv的输出是忽略了最后那半个破损的字符input

如下为无证大师原话class

 c的iconv即便加//ignore也会返回错误码
处理不处理要调用方决定
但php没作
所以,php巨烂 等人喷
相关文章
相关标签/搜索