怎么用PHP把unicode转成utf8

unicode的字符串在浏览器里可以正常显示,但是如果把它放到<input type="text" />里就会变的不知所云了
所以需要在有些时候将unicode转成编码前的状态如UTF8,下面是根据Unicode/Utf8编码区别写的一段程序。
目的将:
&#12527&#12531&#12524&#12505&#12523&#12450&#12489&#12524&#12473&#44&#49&#12524&#12505&#12523&#12450&#12489&#12524&#12473
转成:
ワンレベルアドレス,1レベルアドレス
 
代码:
<?php
// arg: the integer value of one unicode char
function unicode2utf8($unicode_c)
{
 $unicode_c_val = intval($unicode_c);
 $f=0x80; // 10000000
 $str = "";
 // U-00000000 - U-0000007F:   0xxxxxxx
 if($unicode_c_val <= 0x7F)
 {
  $str = chr($unicode_c_val);
 }
 //U-00000080 - U-000007FF:  110xxxxx 10xxxxxx
 else if($unicode_c_val >= 0x80 && $unicode_c_val <= 0x7FF)
 {
  $h=0xC0; // 11000000
  $c1 = $unicode_c_val >> 6 | $h;
  $c2 = ($unicode_c_val & 0x3F) | $f;
  $str = chr($c1).chr($c2);
 }
 //U-00000800 - U-0000FFFF:  1110xxxx 10xxxxxx 10xxxxxx
 else if($unicode_c_val >= 0x800 && $unicode_c_val <= 0xFFFF)
 {
  $h=0xE0; // 11100000
  $c1 = $unicode_c_val >> 12 | $h;
  $c2 = (($unicode_c_val & 0xFC0) >> 6) | $f;
  $c3 = ($unicode_c_val & 0x3F) | $f;
  $str=chr($c1).chr($c2).chr($c3);  
 }
 //U-00010000 - U-001FFFFF:  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
 else if($unicode_c_val >= 0x10000 && $unicode_c_val <= 0x1FFFFF)
 {
  $h=0xF0; // 11110000
  $c1 = $unicode_c_val >> 18 | $h;
  $c2 = (($unicode_c_val & 0x3F000) >>12) | $f;
  $c3 = (($unicode_c_val & 0xFC0) >>6) | $f;
  $c4 = ($unicode_c_val & 0x3F) | $f;
  $str = chr($c1).chr($c2).chr($c3).chr($c4);
 }
 //U-00200000 - U-03FFFFFF:  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
 else if($unicode_c_val >= 0x200000 && $unicode_c_val <= 0x3FFFFFF)
 {
  $h=0xF8; // 11111000
  $c1 = $unicode_c_val >> 24 | $h;
  $c2 = (($unicode_c_val & 0xFC0000)>>18) | $f;
  $c3 = (($unicode_c_val & 0x3F000) >>12) | $f;
  $c4 = (($unicode_c_val & 0xFC0) >>6) | $f;
  $c5 = ($unicode_c_val & 0x3F) | $f;
  $str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5);
 }
 //U-04000000 - U-7FFFFFFF:  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
 else if($unicode_c_val >= 0x4000000 && $unicode_c_val <= 0x7FFFFFFF)
 {
  $h=0xFC; // 11111100
  $c1 = $unicode_c_val >> 30 | $h;
  $c2 = (($unicode_c_val & 0x3F000000)>>24) | $f;
  $c3 = (($unicode_c_val & 0xFC0000)>>18) | $f;
  $c4 = (($unicode_c_val & 0x3F000) >>12) | $f;
  $c5 = (($unicode_c_val & 0xFC0) >>6) | $f;
  $c6 = ($unicode_c_val & 0x3F) | $f;
  $str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5).chr($c6);
 }
 
 return $str;
}
 
$str = "&#12527&#12531&#12524&#12505&#12523&#12450&#12489&#12524&#12473&#44&#49&#12524&#12505&#12523&#12450&#12489&#12524&#12473";
$intArr = explode("&#", $str);
$retr = "";
foreach($intArr as $cval)
{
 if(!empty($cval))
 {
  $retr .= unicode2utf8($cval);
 }
}
echo $retr;
?>


上一篇: php将unicode编码转为utf-8方法
下一篇: 设置PHP脚本执行超时时间的方法
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: php
相关日志:
评论: 0 | 引用: 0 | 查看次数: 2234
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑