在转换 MySQL 资料库,由 big5 转为 utf-8 后,发现资料库中有很多 的字元,这些都是之前被 IE 转进去的 utf-8 文字,因为考量到搜寻的问题,所以要把这些字元转换为真正的 utf-8 才可以
因此我特别写了一个小程式来转
复制程式
function utf8($un) {
$s='';
while(strlen($un)>0){
$p=strpos($un,"");
if ($p===false) {
$s.=$un;
return $s;
}
else{
if ($p!=0){
$s.=substr($un,0,$p);
$un=substr($un,$p);
}
$p=strpos($un,";");
if ($p===false){
$s.=$un;
return $s;
}
else{
$code1=substr($un,0,$p);
if($p>10) $s.=$code1;
else{
$code=substr($un,2,$p-2);
$un=substr($un,$p+1);
if (strcasecmp($code{0},"x")==0){
$code=hexdec(substr($code,1));
}
else{
$code=intval($code);
}
if($code <= 0x7f){
$s.=$code1;
}
elseif($code <= 0x7ff){
$s.=chr(($code >> 6) | 0xc0);
$s.=chr(($code % 0x40) | 0x80);
}
elseif($code <= 0xffff){
$s.=chr( ($code >> 12) | 0xe0);
$s.=chr((($code >> 6) % 0x40) | 0x80);
$s.=chr( ($code % 0x40) | 0x80);
}
elseif($code <= 0x10ffff){
$s.=chr( ($code >> 18) | 0xf0);
$s.=chr((($code >> 12) % 0x40) | 0x80);
$s.=chr((($code >> 6) % 0x40) | 0x80);
$s.=chr( ($code % 0x40) | 0x80);
}
}
}
}
}
return $s;
}
只要将有 的字串丢进去,就可以转换为真正的 utf-8,不过因为文章中的单引号及双引号,之前已被转为 ,这些不用再转回,所以我加了判断,针对小于 0x7f 的字元不做转换