廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3365 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.055604 second(s),query:15 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言