(40条消息) php 判断中文 utf8,PHP 判断 UTF

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));

}

?>

(0)

相关推荐