今天在写程序,发现把数据写入excel,有问题。就看了下,发现是非法字符集的问题,就去找了个办法来忽略非法字符集。实际上,把数据写入之时,先进行转化还是很有意义的。
用到iconv函数,手册里是这么介绍的
iconv
(PHP 4 >= 4.0.5, PHP 5, PHP 7)
iconv — 字符串按要求的字符编码来转换
说明
string iconv ( string incharset,stringout_charset , string $str )
将字符串 str 从 in_charset 转换编码到 out_charset。
参数
in_charset
输入的字符集。
out_charset
输出的字符集。
如果你在 out_charset 后添加了字符串//TRANSLIT,将启用转写(transliteration)功能。这个意思是,当一个字符不能被目标字符集所表示时,它可以通过一个或多个形似的字符来近似表达。 如果你添加了字符串//IGNORE,不能以目标字符集表达的字符将被默默丢弃。 否则,str 从第一个无效字符开始截断并导致一个 E_NOTICE。
——————– 分隔符 ——————
str
要转换的字符串。
返回值
返回转换后的字符串, 或者在失败时返回 FALSE。
大概意思就是把字符集从一种编码转到另一种编码,如果指定了后面的参数,会有其他效果。
下面是我处理的方式,先把带转化的值,转成unicode(UCS-2),用//IGNORE,忽略不能转化的部分字符,然后再转回utf-8即可。
$realvalue = iconv("UTF-8", "UCS-2//IGNORE", $realvalue);//忽略非法字符
$realvalue = iconv("UCS-2", "UTF-8", $realvalue);//转回utf8