by Devin Yang

建立於: 1年前 ( 更新: 1年前 )

您是否有大量的big5編碼的php、js或html頁面需要轉碼?
這裡提供一個我原創的php轉碼方式,用PHP的程式進行檔案的轉碼。

資料庫big5 via latin1的轉碼更為複雜,本文就不做討論啦。

轉碼前最重要的一件事是對您的目標資料夾進行版控,這樣轉碼後,您可以比較是否有正常轉碼成功。
 或是有問題時還可以施展還原大法。

以下的這隻程式的動作非常簡單,應該看code都猜的出來他在做什麼,就是循環參數下的目錄內所有副檔是php、js或html的檔案,
換掉裡面的charset並且把編碼換成UTF8。

要執行這支程式,請確認您的電腦中有安裝php,例如我的php執行程式是在/usr/bin/php中,如果不是可以自己調整#!/usr/bin/php正確的位置。

您能透過which php的指令,檢測您的電腦中php的位置,例如MacOS可能的結果會像下方這樣

 which php
/opt/homebrew/bin/php

當然,您的結果也很可能是

which php
php not found


在沒有安裝php電腦,也可用Docker掛載目錄的方式進行,這是就題外話了,本文不多做介紹。

進入正題,讓我們開始吧!

一、首先,建立一個檔案叫 iconv.php

#!/usr/bin/php
<?php
if(count($argv)>1){
   $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($argv[1]));
   array_filter(iterator_to_array($iterator), function($item) {
       if($item->isFile()){
           $file =  sprintf("%s/%s",$item->getPath(),$item->getFilename());
           if(preg_match('/(\.(php|js|html)$)/', $file, $matches, PREG_OFFSET_CAPTURE)) {
               $output = file_get_contents($file);
               if(!mb_check_encoding($output, 'UTF-8'))
               {
                   echo sprintf("轉換big5檔案為utf8: %s\n", $item->getFilename());
                   $output_utf8 = mb_convert_encoding($output, "UTF-8", "BIG5");
                   $output_utf8 = preg_replace("/charset=big5/", "charset=utf-8", $output_utf8);
                   file_put_contents($file, $output_utf8);
               }
           }
       }
   });
} else {
   echo sprintf("%s [轉檔的目錄]", $argv[0]);
}

二、再來,將這支php變更為可以執行的檔案,+x讓檔案有可執行的權限。

chmod +x iconv.php


三、最後,有了這支轉碼程式後,我們就可以在終端機執行囉。
以下為示意圖,例如我要轉碼的程式是在/var/www/html目錄下。

./iconv.php /var/www/html
轉換big5檔案為utf8: abc.php
轉換big5檔案為utf8: test.php

四、轉碼完成,可以到目標目錄,例如我是/var/www/html,用git diff查看是否有什麼異常
可以看到,這支轉碼程式,除了幫我們轉換編碼,也協助我們把code改掉囉

diff --git a/abc.php b/abc.php
index 3bee6ed..5797c23 100644
--- a/abc.php
+++ b/abc.php
@@ -2,13 +2,13 @@
<html>
<head>
<title>Page Title</title>
-<meta http-equiv="content-type" content="text/html; charset=big5">
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
-<A4><A4><A4><E5>
+中文
</body>
</html>
diff --git a/test.php b/test.php
index 3bee6ed..5797c23 100644
--- a/test.php
+++ b/test.php

 

Tags: big5

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!