php输出字符unicode码,[PHP]单字符Unicode编码解码函数

PHP 自带函数里面似乎是没有能够对字符或字符串进行直接转换的函数,百度了一下,发现了一个封装函数能用。

精简过后的函数内部还是会经过几次编码转换,但是我发现编码之后对特殊字符的转换有问题,索性再精简直接去掉了编码。

所以函数现在只支持UTF-8且只能单字符(传入字符串返回错值)

function char_unicode($str, $DECODE = True) {

$result = '';

if ($DECODE === False) {

$unicodestr = intval(base_convert(bin2hex(iconv('utf-8', 'UCS-4', $str)), 16, 10));

$result = $unicodestr;

} else {

$temp = intval($str);

$result = iconv('UCS-2BE', 'utf-8', ($temp < 256) ? chr(0) . chr($temp) : chr($temp / 256) . chr($temp % 256));

}

return $result;

}

需要的是单字符编码,对此函数进行了一点精简和修改,精简后默认UTF-8是没有问题的,本人对编码的认知不深,所以对其他编码能否完美支持这里不做测试了。

测试效果:

a7720da04c2536a2ce7a9133397b9796.gif

函数内容:

/**

* $str 编码字符串

* $DECODE 是否解码

* $encoding 字符串的编码,默认utf-8

*/

function char_unicode($str, $DECODE = True, $encoding = 'utf-8') {

$result = '';

if ($DECODE !== True) {

$str = iconv($encoding, "gb2312", $str);

if (ord(substr($str, 0, 1)) < 0xA1) { //如果为英文则取1个字节

$row = iconv("gb2312", $encoding, substr($str, 0, 1));

} else {

$row = iconv("gb2312", $encoding, substr($str, 0, 2));

}

//转换Unicode码

$unicodestr = base_convert(bin2hex(iconv($encoding, 'UCS-4', $row)), 16, 10);

$result = $unicodestr;

} else {

$temp = intval($str);

$unistr = ($temp < 256) ? chr(0) . chr($temp) : chr($temp / 256) . chr($temp % 256);

$result = iconv('UCS-2', $encoding, $unistr);

}

return $result;

}

测试代码:

header('Content-type:application/json;;charset=UTF-8');

/**

* $str 编码字符串

* $DECODE 是否解码

* $encoding 字符串的编码,默认utf-8

*/

function char_unicode($str, $DECODE = True, $encoding = 'utf-8') {

$result = '';

if ($DECODE !== True) {

$str = iconv($encoding, "gb2312", $str);

if (ord(substr($str, 0, 1)) < 0xA1) { //如果为英文则取1个字节

$row = iconv("gb2312", $encoding, substr($str, 0, 1));

} else {

$row = iconv("gb2312", $encoding, substr($str, 0, 2));

}

//转换Unicode码

$unicodestr = base_convert(bin2hex(iconv($encoding, 'UCS-4', $row)), 16, 10);

$result = $unicodestr;

} else {

$temp = intval($str);

$unistr = ($temp < 256) ? chr(0) . chr($temp) : chr($temp / 256) . chr($temp % 256);

$result = iconv('UCS-2BE', $encoding, $unistr);

}

return $result;

}

$str = "爱";

$int = char_unicode($str,False);

$unstr = char_unicode($int);

$str2 = char_unicode($unstr,False);

echo 'unicode编码前:'.$str .PHP_EOL;

echo 'unicode编码后:'.$unstr.PHP_EOL;

echo 'unicode解码后:'.$str2.PHP_EOL;

您可以选择一种方式赞助本站支付宝赞助

a7720da04c2536a2ce7a9133397b9796.gif

微信赞助

a7720da04c2536a2ce7a9133397b9796.gif

分享到各大网站

分享到:更多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值