網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術
論壇幫助 社區 日曆事件 今日新文章 搜尋

回覆
 
主題工具
  #1  
舊 2011-09-30, 11:29 PM
cool 的頭像
cool cool 目前離線
進階會員
 
註冊日期: 2002-10-01
文章: 2,763
預設 utf-8網頁編碼,可寫入big5資料庫?

big5資料庫,利用iconv語法,可以讓內容輸出至utf-8編碼網頁正常顯示。
但相反地,用iconv語法,卻沒辦法由utf-8網頁資料寫入big5資料庫。

utf-8網頁編碼資料,現可有何方法寫入big5資料庫?

此篇文章於 2011-10-01 12:31 AM 被 cool 編輯。
回覆時引用此篇文章
  #2  
舊 2011-10-01, 01:14 AM
Matt 的頭像
Matt Matt 目前離線
進階會員
 
註冊日期: 2004-02-23
住址: 雲端
文章: 424
預設

網路搜尋來的
http://plus-now.com/?p=338
or 搜尋
php iconv UTF-8 to Big5

如果
utf-8轉csv 轉big5 不知可不可行
回覆時引用此篇文章
  #3  
舊 2011-10-02, 11:04 AM
slob 的頭像
slob slob 目前離線
普通會員
 
註冊日期: 2009-04-07
住址: 台中市大里區
文章: 96
發送 MSN 消息給 slob
預設

可能是iconv遇到有些字無法轉換而導致中斷了

一般來說雙字元的中文用mb_convert_encoding(要被轉得字串, ‘目標編碼’, ‘原本的編碼’);
來轉換,它會把無法轉換的字用「 ?」 替代...

PHP 代碼:
$string mb_convert_encoding($str_utf8‘BIG-5′‘UTF-8′); 
如果真要用iconv 函數,就得加上「代替字元+跳過」參數://TRANSLIT//IGNORE
PHP 代碼:
$string iconv("utf-8","big5//TRANSLIT//IGNORE",$str_utf8); 
它會把無法轉換的字看看有無可替代的字元,若無則直接跳過...

但是這樣就跟原文有很大的出入了...

另外,要維持文章能確保每個字都能夠顯示,那big5缺字要怎麼搞?

那就必須把big5缺字以 UnicodeHTML 碼代替,這就必須找找網路上先進寫好的函數來轉換...

PHP 代碼:
function utf8_2_big5($utf8_str) {
$i=0;
$len strlen($utf8_str);
$big5_str="";
for (
$i=0;$i<$len;$i++) {
$sbit ord(substr($utf8_str,$i,1));
if (
$sbit 128) {
$big5_str.=substr($utf8_str,$i,1);
} else if(
$sbit 191 && $sbit 224) {
$new_word=iconv("UTF-8","Big5",substr($utf8_str,$i,2));
$big5_str.=($new_word=="")?(mb_convert_encoding(substr($utf8_str,$i,3), 'HTML-ENTITIES''UTF-8')):$new_word;
$i++;
} else if(
$sbit 223 && $sbit 240) {
$new_word=iconv("UTF-8","Big5",substr($utf8_str,$i,3));
$big5_str.=($new_word=="")?(mb_convert_encoding(substr($utf8_str,$i,3), 'HTML-ENTITIES''UTF-8')):$new_word;
$i+=2;
} else if(
$sbit 239 && $sbit 248) {
$new_word=iconv("UTF-8","Big5",substr($utf8_str,$i,4));
$big5_str.=($new_word=="")?(mb_convert_encoding(substr($utf8_str,$i,3), 'HTML-ENTITIES''UTF-8')):$new_word;
$i+=3;
}
}
return 
$big5_str;

好,上半部可以存入資料庫了,但是現在文章要顯示,呼叫出來又有一個麻煩了...
下半部就是要解決big5+UnicodeHTML 要怎麼轉 UTF-8
PHP 代碼:
function hex2bin($string) { //16進位轉2進位
$len strlen($string); 
return 
pack("H".$len$string); 



function 
unicode_str_2_utf8($str) {
$strlen1="";
$str1=explode('&#',$str);
if(
count($str1)>1){
  foreach(
$str1 as $k =>$v){
    
$str2=explode(';',$v);
     if(
count($str2)>1){
      foreach(
$str2 as $k1 =>$v1){
       if(
is_numeric($v1)){
        
$strlen1.='     ';
        
$unicodeHtml iconv("ucs-2""utf-8"hex2bin(base_convert($v11016))); 
       }else{
        
$unicodeHtml iconv("big5","utf-8",$v1);
       }
       
$str3.=$unicodeHtml;
      }
     }else{
      
$str3.=$v;
      
$str3=iconv("big5","utf-8",$str3);
     }
     
$str4=$str3;
  }
}else{
 
$str4=iconv("big5","utf-8",$str);

return (
$str4);

你必須要用 unicode_str_2_utf8 來轉換資料,才能正確顯示....
回覆時引用此篇文章
  #4  
舊 2011-10-02, 05:24 PM
seesawgame 的頭像
seesawgame seesawgame 目前離線
進階會員
 
註冊日期: 2004-07-25
住址: 域名家.com
文章: 6,546
預設

樓上果然是高手高手高高手
__________________
回覆時引用此篇文章
  #5  
舊 2011-10-02, 10:51 PM
cool 的頭像
cool cool 目前離線
進階會員
 
註冊日期: 2002-10-01
文章: 2,763
預設

引用:
作者: slob 查看文章
那就必須把big5缺字以 UnicodeHTML 碼代替,這就必須找找網路上先進寫好的函數來轉換.....
十分感謝slob大,詳細教程,一次到位啊。

原本想解決的範圍較多,因原有資料庫筆數眾多,暫先縮小應用的範圍:表單寫入。



紅色部分,想要新增mobile form(utf-8表單)給user使用。
黑色為現正常運行的流程部份。

mobile form部分,big5缺字如以 UnicodeHTML 碼代替寫入,剛想到一新問題(1)。
big5的管理頁,呼叫出來內容是否還需經過轉換才能正常顯示?似乎也要動到於big5的管理頁面。

此篇文章於 2011-10-02 11:19 PM 被 cool 編輯。
回覆時引用此篇文章
  #6  
舊 2011-10-03, 08:50 PM
slob 的頭像
slob slob 目前離線
普通會員
 
註冊日期: 2009-04-07
住址: 台中市大里區
文章: 96
發送 MSN 消息給 slob
預設

後台是 BIG5 讀取也是 BIG5 就不用改什麼了呀~
回覆時引用此篇文章
  #7  
舊 2011-10-03, 11:04 PM
cool 的頭像
cool cool 目前離線
進階會員
 
註冊日期: 2002-10-01
文章: 2,763
預設

引用:
作者: slob 查看文章
後台是 BIG5 讀取也是 BIG5 就不用改什麼了呀~
嗯~ok了,後台可正常顯示不用改。
先用mb_convert_encodin比較簡單些,再慢慢來試試第二段iconv 函數。

謝謝你。
回覆時引用此篇文章
  #8  
舊 2011-10-30, 12:43 AM
cool 的頭像
cool cool 目前離線
進階會員
 
註冊日期: 2002-10-01
文章: 2,763
預設

完成了部份。

想請有智慧型手機的版友瀏覽測試,整個頁面操作是否流暢?
除了部分連結及頁面內容還沒上外,歡迎給建議。



另一問題一直搞不定,在jQuery環境下,return false; 沒作用。
版友可否用過jQuery Mobile這套頁面模組,將表單(指定部分欄位必填的條件下)成功送出?

找過幾個jQuery表單程式,單獨運作是OK,但與jQuery Mobile整合時,訂購表單欄位不填寫,也會被處理往下一頁進行。


此篇文章於 2011-10-30 01:05 AM 被 cool 編輯。
回覆時引用此篇文章
  #9  
舊 2011-11-22, 08:46 AM
Marine Marine 目前離線
初級會員
 
註冊日期: 2010-10-26
文章: 24
發送 MSN 消息給 Marine
預設

UTF8 是三字节 BIG5是双字节.

如非必需转码 最好使用统一的字集来存储, 不管是 用iconv 还是 自定义函数进行转码都要多出时间上的损耗的.

btw: iconv有bug ,碰到一些生僻字就会无法转换 可以使用 mb_convert_encoding
回覆時引用此篇文章
回覆


發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 12:54 AM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.