GBK和UTF-8编码的转换是一个非常恶心的事情
2021-07-20
原文链接:
GBK和UTF-8编码之间的转换是一件很恶心的事情。例如,在 PHP 中编码转换 php编码转换 php,它根本不支持 GBK 编码。可以支持编码转换的库函数有两个,通常能想到的函数就是函数,用起来也很爽:
iconv('GBK', 'UTF-8//IGNORE', '芒果小站'); // 将字符串由 GBK 编码转换为 UTF-8 编码
但只能解决编码提前已知的情况。如果字符串的编码未知,则需要先检测其编码。在这种情况下,您可以使用扩展库:
mb_detect_encoding('芒果小站');
但是有一个缺陷,经常有不准确的判断。也许这可以解决:
// 使用 iconv 转换并判断是否等值,效率不高 function is_utf8 ($str) { if ($str === iconv('UTF-8', 'UTF-8//IGNORE', $str)) { return 'UTF-8'; } } // 多种编码的情况 function detect_encoding ($str) { foreach (array('GBK', 'UTF-8') as $v) { if ($str === iconv($v, $v . '//IGNORE', $str)) { return $v; } } }
通过上述方法得到字符串编码信息后,可以使用 或 进行编码转换。