[教學] [自創]phpbb db big5 > utf-8轉換

phpBB Installation & Usage Support
phpBB 2 安裝於各類型作業平台之問題討論;外掛問題,請到相關版面依發問格式發表!
(發表文章請按照公告格式發表,違者砍文)

版主: 版主管理群

版面規則
本區是討論關於 phpBB 2.0.X 架設安裝上的問題,只要有安裝任何外掛,請到外掛討論相關版面按照公告格式發表。
(發表文章請按照公告格式發表,違者砍文)
主題已鎖定
shing6326
星球普通子民
星球普通子民
文章: 4
註冊時間: 2006-06-09 17:35

[教學] [自創]phpbb db big5 > utf-8轉換

文章 shing6326 »

這個方法本人試驗了一整天,最終成功了,這方法未必是最好,但起碼能用。
尊重作者,轉貼本文章請貼上來源http://phpbb-tw.net/phpbb/viewtopic.php?t=44663,謝謝

1.輸出phpbb的資料庫,建議將phpbb_search_* table內的record刪除以減低db size

2.把以下code另傳成abc.php,記住修改$t (剛才輸出的db),$filename(經過處理後的檔案),改完記得把$filename和$t和abc放到同一目錄下還有chmod 777 $filename,之後打開ie打上http://xxx/abc.php,如執行成功會出現Success, wrote to file test.txt的字樣

代碼: 選擇全部

<?php
$t = 'dbname.sql';
$filename = 'test.txt';

(!$f=file_get_contents($t))? die("Fail to open target link!!") : NULL ;

$somecontent = Fix_Backslash($f);

$somecontent = iconv("big5","utf-8",$somecontent);

// Let's make sure the file exists and is writable first.
if (is_writable($filename)) {

   // In our example we're opening $filename in append mode.
   // The file pointer is at the bottom of the file hence
   // that's where $somecontent will go when we fwrite() it.
   if (!$handle = fopen($filename, 'a')) {
         echo "Cannot open file ($filename)";
         exit;
   }

   // Write $somecontent to our opened file.
   if (fwrite($handle, $somecontent) === FALSE) {
       echo "Cannot write to file ($filename)";
       exit;
   }
  
   echo "Success, wrote to file ($filename)";
  
   fclose($handle);

} else {
   echo "The file $filename is not writable";
}

exit;

function Fix_Backslash($org_str) {
//      if ( mysql_client_encoding() != "big5" ) return $org_str;

      $tmp_length = strlen($org_str);

      for ( $tmp_i=0; $tmp_i<$tmp_length; $tmp_i++ ) {
        $ascii_str_a = substr($org_str, $tmp_i , 1);
        $ascii_str_b = substr($org_str, $tmp_i+1, 1);

        $ascii_value_a = ord($ascii_str_a);
        $ascii_value_b = ord($ascii_str_b);

        if ( $ascii_value_a > 128 ) {
          if ( $ascii_value_b == 92 ) {
            $org_str = substr($org_str, 0, $tmp_i+2) . substr($org_str,$tmp_i+3);
            $tmp_length = strlen($org_str);
          }
          $tmp_i++;
        }
      }

      $tmp_length = strlen($org_str);
      if ( substr($org_str, ($tmp_length-1), 1) == "\\" ) $org_str .= chr(32);

      $org_str = str_replace("\\0", "\ 0", $org_str);
      return $org_str;
    }
?>
3.最後就可以把test.txt輸入資料庫了....
ckmarkhsu
星球公民
星球公民
文章: 139
註冊時間: 2005-03-21 09:38

文章 ckmarkhsu »

我建議可以讓他在 console 底下跑

不然直接用 web 跑很容易 timeout 就爆炸了Orz........

執行方式 cmd \ php.exe filename.php
台灣深藍vBulletin技術論壇

vBulletin 論壇系統,內建

「0 修改新增插件」「完整附件功能」「無限深度子論壇」「進階權限管理」「前台 AJAX 即時管理」

歡迎研究:)
頭像
不滅之火
星球公民
星球公民
文章: 54
註冊時間: 2003-05-08 17:33
來自: 澳門

文章 不滅之火 »

嘩!這個方法簡直是高明呀! :-o
shing6326
星球普通子民
星球普通子民
文章: 4
註冊時間: 2006-06-09 17:35

文章 shing6326 »

不滅之火 寫:嘩!這個方法簡直是高明呀! :-o
看不懂.. :?: :?:
頭像
oscerropper
星球公民
星球公民
文章: 197
註冊時間: 2004-12-21 17:56
來自: 興趣的黑洞

文章 oscerropper »

似乎超過16MB就不能進行轉換 :-?
●架設主機作業系統:Unix
●您的上網方式:虛擬主機。
●您安裝的程式:
Apache version 2.0.63
MySQL version 45.0.92-community
PHP version 5.2.14
Perl version 5.8.8
●您的 phpBB2 版本:phpBB 3.0.8。
shing6326
星球普通子民
星球普通子民
文章: 4
註冊時間: 2006-06-09 17:35

文章 shing6326 »

oscerropper 寫:似乎超過16MB就不能進行轉換 :-?
用ckmarkhsu的方法試試,如果用網頁來轉太大的資料庫要把max execute time加大,是比較麻煩的....
主題已鎖定

回到「phpBB 2 安裝與使用」