广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 3392 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
aa 手机 会员卡 葫芦墩家族
个人文章 个人相簿 个人日记 个人地图 个人商品
特殊贡献奖 社区建设奖
头衔:            
站长
级别: 站长 该用户目前不上站
推文 x1964 鲜花 x5260
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[PHP][教学] 将资料库中的 &# 字元转为 UTF-8
在转换 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 的字元不做转换



献花 x0 回到顶端 [楼 主] From:台湾新世纪资通股份有限公司 | Posted:2008-08-29 15:40 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.052804 second(s),query:15 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言