视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php utf8如何转unicode
2020-11-02 17:27:49 责编:小采
文档


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

推荐:《PHP视频教程》

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可以正常转换的

下面是两个本人亲测可以使用的函数(为了避免以后跟系统新的内置函数同名在前面加了个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.'<br>';
$str = myunicode_decode($ustr);
echo $str.'<br>';

输出结果:

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

下载本文
显示全文
专题