unicode utf8 转换 php,php utf8如何转unicode

php utf8转unicode的方法:首先创建一个PHP示例文件;然后通过“iconv($encoding, 'UCS-2BE', $str);”方法实现转换即可。

d15327cf81c8912f1ff1e6cffcd7f217.png

linux下php中文UTF-8转换Unicode方法和注意事项

先说下遇到问题:1.php没有内置unicode_ecode函数可以直接使用

2.网上很多资料都是用$str = iconv($encoding,'UCS-2',$str);

window下转换出来的是正常的,但在Linux下转换出来的两个字符是相反的,用在线unicode转换工具出来的结果是乱码。

UCS-2的编码规则:

windows下默认是UCS-2LE。

linux下默认是UCS-2BE。用iconv(指定UCS-2)来转换生成的是UCS-2BE的unicode,但可能php环境配置会导致不是UCS-2BE。

windows和linux等多个平台对 UCS-2 的理解不同(UCS-2LE,UCS-2BE),所以为了统一需要直接指定为UCS-2BE。

即把:$str = iconv($encoding,'UCS-2',$str); 改为$str = iconv($encoding,'UCS-2BE',$str);

亲测转换出来的unicode可以正常转换的

7e7c19f31ae3dcad29860107eb72f403.png

下面是两个本人亲测可以使用的函数(为了避免以后跟系统新的内置函数同名在前面加了个my前缀):/**

* utf-8 转unicode

* @param string $name

* @return string

*/

function myutf8_unicode($name){

$name = iconv('UTF-8', 'UCS-2BE', $name);

$len = strlen($name);

$str = '';

for ($i = 0; $i < $len - 1; $i = $i + 2){

$c = $name[$i];

$c2 = $name[$i + 1];

if (ord($c) > 0){

$str .= '\u'.base_convert(ord($c), 10, 16).str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);

} else {

$str .= '\u'.str_pad(base_convert(ord($c2), 10, 16), 4, 0, STR_PAD_LEFT);

}

}

return $str;

}

/**

* unicode 转 utf-8

*

* @param string $name

* @return string

*/

function myunicode_decode($name)

{

$name = strtolower($name);

// 转换编码,将Unicode编码转换成可以浏览的utf-8编码

$pattern = '/([\w]+)|(\\\u([\w]{4}))/i';

preg_match_all($pattern, $name, $matches);

if (! empty($matches)) {

$name = '';

for ($j = 0; $j < count($matches[0]); $j ++) {

$str = $matches[0][$j];

if (strpos($str, '\\u') === 0) {

$code = base_convert(substr($str, 2, 2), 16, 10);

$code2 = base_convert(substr($str, 4), 16, 10);

$c = chr($code) . chr($code2);

$c = iconv('UCS-2BE', 'UTF-8', $c);

$name .= $c;

} else {

$name .= $str;

}

}

}

return $name;

}

测试代码:$ustr = myutf8_unicode('我的新衣');

echo '我的新衣:'.$ustr.'
';

$str = myunicode_decode($ustr);

echo $str.'
';

输出结果:

77c9ec02f0fec5cdc90cac0849132ad0.png

在站长工具里可以正常转换,说明没有问题。

7e7c19f31ae3dcad29860107eb72f403.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值