PHP 在判断简体 / 繁体中文部份,以前是可以 Big5 / GB2312 / GBK 来判断(可以使用 mb_detect_encoding()),但是 UTF-8 后,就有点麻烦了。 PHP 判断 UTF-8 字符串是 简体 或 繁体中文 简体和繁体的 UTF-8 字码表是可以列的出来,不过会有一个字同时是简体和繁体的情况,要判断一个字符串是简体和繁体,这种判断法有点复杂。 想到比较偷懒的方式,就是在把 UTF-8 转换成 Big5 / CP950,再来比较看看字符串长度(文本字符串长度不同就代表不是繁体),虽然这个作法不是 100% 准确,但是应该够用了。 PHP 有下述两个 Function 是作编码转换的: 以往我都用 mb_convert_encoding() 来做转换,但是在此转换时,用这个转 CP950 UTF-8 这些在怎么互转,里面的编码都会帮我留存的很好,造成要去换算长度都是一 样的,所以改用 iconv()。 注:iconv() 需要搭配 //IGNORE mb_convert_encoding() 与 iconv() 的文本长度范例 $strings = [ '微软软体', '微软软件', '今天天气真好', ]; foreach ($strings as $i => $s) { echo $i . ' cp950: ' . mb_strlen(mb_convert_encoding($s, 'cp950', 'utf-8'), 'cp950') . "\n"; echo $i . ' cp950: ' . mb_strlen(iconv('UTF-8', 'cp950//IGNORE', $s), 'cp950') . "\n"; echo $i . ' cp950: ' . mb_strlen(mb_convert_encoding(mb_convert_encoding($s, 'cp950', 'utf-8'), 'UTF-8', 'cp950'), 'UTF-8') . "\n"; echo $i . ' utf-8: ' . mb_strlen($s, 'utf-8') . "\n"; } ?> 于上述测试,所以写下述两个 function 来判断简体与繁体 // 判断字符串是否是简体 function is_simplified($str) { $len = mb_strlen($str, 'utf-8'); return ($len != mb_strlen(iconv('UTF-8', 'cp950//IGNORE', $str), 'cp950')) ? true : false; } // 判断字符串是否是繁体 function is_traditional($str) { $len = mb_strlen($str, 'utf-8'); // gbk 包含 big5 内的字符,所以不能用 gbk return ($len != mb_strlen(iconv('UTF-8', 'gb2312//IGNORE', $str), 'gb2312')) ? true : false; } ?> 验证范例 $strings = [ '微软软体', '微软软件', '今天天气真好', ]; foreach ($strings as $i => $s) { echo $s . "\n"; var_dump(is_simplified($s)); var_dump(is_traditional($s)); } ?> |
|