利用FooTable列出可分頁、搜尋、排序的資料檢視

這個工具是 Table view, FooTable:

https://fooplugins.github.io/FooTable/

很適合快速地將資料利用 table 的方式呈現出來, 這個工具的特點是同時可以分頁、搜尋、排序與編輯, 尤其在 mobile view (responsive) 時, 可以摺疊內容, 不用橫向捲動, 十分方便.

這裡將利用財金公司的國內銀行分行代碼表來進行示範, 原始資料在這裡:

https://www.fisc.com.tw/TC/Service?CAID=51254999-5d15-4ddf-8e54-4b2cdb2a8399

其中的”下載完整對照表”, “台幣匯款”, 可以下載完整的國內銀行總分支機構代碼(7碼)與名稱, 連結如下:

https://www.fisc.com.tw/tc/download/twd.txt

內容如上, 純文字檔, 不過請注意右下角的 Big5 編碼, 若要實作為 web 程式碼, 需要轉換為 UTF-8 (下面的程式碼使用 mb_convert_encoding 進行轉換).

接下來利用 FooTable 進行實作囉, 基礎程式碼如下:

$(document).ready(function() {
  $('.table').footable({
    "paging": {
      "enabled": true,
    },
    "filtering": {
      "enabled": true
    },
    "sorting": {
      "enabled": true
    },
    "columns": [{
        "name": "id",
        "title": "id"
      },
      {
        "name": "branch",
        "title": "branch",
        "breakpoints": "xs"
      },
      {
        "name": "abbr",
        "title": "abbr"
      }
    ],
    "rows": $.get("twd.php"),
  });
});

簡單說明, paging, filtering, sorting 要設為 true, 而 columns 有三欄, 所以分別給定對應的欄位名(name)與欄位顯示(title), 其中 branch 有多加了 breakpoints: xs 代表著在 xs 時要摺疊, 也就是小畫面時, 會將此欄位收納起來. 而 rows 則為實際的資料, 這裡簡單使用一支 php 程式進行, 程式碼如下:

[ASP]過濾非BIG5編碼字元

這篇文章利用了之前的單字元判斷是否為 BIG5 的 ASP程式進行實作 (link), 由於是一個字一個字判定, 所以效率不會太好, 但可以快速解決有關在 UTF-8轉到 BIG5時, 不在該字元集的文字內容, 以過濾掉這類特殊的問題. 程式碼如下:

Function IsBig5(strChar) 
    ' check A440~C67E 常用字, C940~F9D5 次常用字 
    session.codepage="950"  
    Dim lngAsc  
    lngAsc = Asc(strChar)  
    IsBig5 = (lngAsc >= -23488 And lngAsc <= -14722)  
    If Not IsBig5 Then IsBig5 = (lngAsc >= -14016 And lngAsc <= -1579)  
    session.codepage="65001"  
End Function

Function TrimNonBig5(strUTF8)
    For i=1 to Len(strUTF8)  
        charTemp = Mid(strUTF8,i,1)  
        If IsBig5(charTemp) Then
            TrimNonBig5 = TrimNonBig5 + charTemp
        End If
    Next  
End Function

str1 = "桃之雫果凍"
response.write TrimNonBig5(str1)
' output 桃之果凍

str2 = "洋風和菓子零食"
response.write TrimNonBig5(str2)
' output 洋風和子零食

str3 = "游錫堃王建煊"
response.write TrimNonBig5(str3)
' output 游錫王建

以上的程式可以有效地將非在 Big5 字元集中的文字過濾, 避免與傳統編碼程式溝通時的問題.

[2014/11/10 11:12]
若是有需要再補上 ASCII 字元集區段的部分, 可以使用 ASC 於 32~126 的 ASCII Printable 即可(參考資料: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart), 記得是在轉 code page前測試 ASCII, 程式碼如下:

Function IsBig5Asc(strChar)
    ' check A440~C67E 常用字, C940~F9D5 次常用字, asc printable 32~126
    Dim lngAsc
    lngAsc = Asc(strChar)
    IsBig5Asc = (lngAsc >= 32 And lngAsc <= 126)
    session.codepage="950"
    lngAsc = Asc(strChar)
    If Not IsBig5Asc Then IsBig5Asc = (lngAsc >= -23488 And lngAsc <= -14722)
    If Not IsBig5Asc Then IsBig5Asc = (lngAsc >= -14016 And lngAsc <= -1579)  
    session.codepage="65001"  
End Function

Function TrimNonBig5Asc(strUTF8)
    For i=1 to Len(strUTF8)  
        charTemp = Mid(strUTF8,i,1)  
        If IsBig5Asc(charTemp) Then
            TrimNonBig5Asc = TrimNonBig5Asc + charTemp
        End If
    Next  
End Function

str1 = "桃之雫果凍1200G(1.2公斤)"
response.write TrimNonBig5Asc(str1)
' output 桃之果凍1200G(1.2公斤)

好用工具Encode Explorer

今天在協助朋友解決一個在 linux apache 下的 php 程式對中文檔名檔案存取的問題, 在思考在 linux 下的 file system 對中文檔名存放的編碼時, 想說直接找個工具來用比較快. 因為其實不需要真的去檢查看 file system 上中文檔名存放的編碼, 只需要找個 php 的 file explorer 來進行就可以了, 找出對應的編碼即可. 實際上, 之後的程式也是透過 php 存取, 所以用 php 的 file explorer 檢查是最方便不過了.

找到這個好用的工具, 短小精幹, 一支主程式, 就是這麼方便: Encode Explorer – http://encode-explorer.siineiolekala.net/

可以先試看看該網站的 demo: http://encode-explorer.siineiolekala.net/explorer/index.php

一支程式就可以做 file exploer 功能, 所以利用這樣的方式來檢查看中文檔名是否正常, 該程式預設是使用 utf-8 的, 不過朋友的虛擬主機上是 big5 的中文編碼, 所以在 Encode Exploer 下看到亂碼的中文檔名, 利用瀏覽器的編碼改為 big5 就看得到該中文檔名了, 這下就明白朋友的虛擬主機上的中文檔名是走 big5, 對後續在應用 timthumb.php 縮圖無法正確取得本地中文檔名的問題就解決了.

若網友們有碰到這樣的問題, 也可以試著用這套工具來檢查看看. 當然, 若是需要找個方便好用的 php file exploer, 這套工具也是十分方便好用呢!

撰寫big5的asp.net程式

由於預設的 asp.net 程式開發是使用 utf-8 的編碼, 所以若是要開發 big5 的 asp.net 程式, 需要做一些調整.

可以參考這篇有關 globalization 項目設定的網頁: http://msdn.microsoft.com/zh-tw/library/hy4kkhe0(VS.80).aspx

其實很單純的將 web.config 中的 system.web 內的 globalization 的屬性: requestEncoding 及 responseEncoding 做些調整即可. 由於預設的是:

<globalization requestEncoding="utf-8" 
               responseEncoding="utf-8" 
               fileEncoding="" 
               culture="" 
               uiCulture="" 
               enableClientBasedCulture="false" 
               responseHeaderEncoding="utf-8" 
               resourceProviderFactoryType="" 
               enableBestFitResponseEncoding="false" />

所以會是 utf-8 的編碼, 若是要開發 big5 的 asp.net 程式, 僅需要做這裡的調整即可. 程式碼本身並不需要更動, 就可以依照這個 web.config 做指定輸出了. 若是字元是 utf-8 的, 但指定用 big5 輸出時, 仍然會有 ?? 這種狀況發生, 也是要注意的地方, 不過一般的狀況下(字元相容的字)是沒有問題的.

但是頁面上的 meta tag 則必須 user 自行手動修改, 或利用小程式輔助來進行調整,

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

因為 web.config 是在 http header 就已經輸出指定的 encoding 囉, 而不是透過 meta tag 的 charset 指示的! 以下是 firefox 配合 Live HTTP headers 的 extension 抓出來的內容:

http://localhost:50201/WebSite2/Default.aspx

 

GET /WebSite2/Default.aspx HTTP/1.1
Host: localhost:50201
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-tw,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Big5,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 200 OK
Server: ASP.NET Development Server/8.0.0.0
Date: Tue, 22 Jul 2008 09:42:40 GMT
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 537
Connection: Close
———————————————————-

給大家參考看看囉!

如何在ASP內判定BIG5碼中文字

大多數的 asp 應用程式若是在 utf-8 模式下開發, 前面多會有這麼一行:

<%@LANGUAGE=”VBSCRIPT” CODEPAGE=”65001″%>

然而有個很麻煩的事是在處理判定 BIG5 編碼的中文字. 在正常的狀況下, 應該不會用到這樣的功能, 因為無論是 BIG5 或非 BIG5 的中文字都是可以在 UTF-8 的環境下良好並存的, 但若是和一些舊的程式或其他異質環境介接, 就會遇到這種問題, 解決的方式是利用 asp 的 codepage 來轉換內碼後判定即可. 方式如下:

Function IsBig5(strChar)

    ' check A440~C67E 常用字, C940~F9D5 次常用字

    session.codepage="950"
    Dim lngAsc
    lngAsc = Asc(strChar)
    IsBig5 = (lngAsc >= -23488 And lngAsc <= -14722)
    If Not IsBig5 Then IsBig5 = (lngAsc >= -14016 And lngAsc <= -1579)
    session.codepage="65001"
End Function

在php中的UTF-8字元斷字方式

在 PHP 中, 若是有中文字時, 使用 substr() 函數時, 會發生斷字的問題. 如何解決呢? 我們可以利用 mb_ 開頭的系列函數來操作我們需要的行為, 例如取出左五碼, 可以這麼下:

$str = "中文字及english測試";
echo mb_substr($str, 0, 5, 'UTF-8');

這樣會顯示 “中文字及e” 這樣五個字出來.

另外一個重點在於該組函數後面加入的 encodeing 是關鍵, 若是 UTF-8, 可以用 UTF-8 或 UTF8 皆可以正常使用, 還有較常用的兩個函數: mb_strlen 及 mb_strwidth, 前者是用來取得字元個數, 後者則是取得寬度, 後者目地主要在於排版顯示用途, 因為寬字元會計算為 2, 如此一來便能有效地算出參考寬度.

以下為參考程式碼:
http://sample.diary.tw/4/php.php