程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> UTF8下的中文PHP編程

UTF8下的中文PHP編程

編輯:關於PHP編程

前言:

說實話,
涼鞋也覺得 UTF8 是好東西……
畢竟同屏顯示中日韓對東亞人的吸引力是不小的……
(當然好處不僅是這點啦……)
不僅是網頁程式……
很多應用程式的內核都開始使用 Unicode 編碼……
目的是顯而易見的:支援多語言顯示……
微軟的所有軟體都是 Unicode 內核……
所以日文軟體拿到你的中文 XP 上是可以正常顯示的……
而中文 98 就會因為 GB 內核安裝其他語言軟體時造成亂碼……

至於 UTF8 ,
可以說是 Unicode 的一個分支,
它用三個字節保存一個漢字……
(Unicode 用四個字節)
應用軟體都集體投奔 Unicode 了……
就不允許我們搞網頁程式的用 UTF8?

本文中涼鞋就盡量多方位介紹一下 UTF8 編碼下的 php(做為現在的主流開發語言) 編程……
至於為什麼單獨介紹“中文”……
一來是因為英文這玩意實在不需要考慮 UTF8 ……
除非你准備做多語言系統……
(我要發些牢騷:現在的老外寫程式時根本不重視這個問題……)
二來是中日韓等多字節語系在 UTF8 編碼下的處理方式其實大同小異……
依葫蘆畫瓢即可……
好……先從數據庫處理部分開始吧……


==========================================
連接數據庫

很多人剛升級到 MySQL(和PHP搭配之最佳組合) 4.1 時會發現數據亂掉了……
其實是因為 MySQL(和PHP搭配之最佳組合) 從 4.1 開始支援字符集了……
而且默認字符集正是 UTF8 ……
(充分證明與國際接軌的重要性…… 嘿嘿……)
而以前我們大多使用 utf8 或是 GBK 編碼……
這樣以來輸出的數據當然是亂碼……
要解決亂碼……
就得讓程序知道該獲取什麼編碼的數據……

我們假設你以前的數據庫是 utf8 編碼的……
那麼你可以在查詢前添加一句

MySQL(和PHP搭配之最佳組合)_query(SET CHARACTER SET utf8) or die("Query failed : " . MySQL(和PHP搭配之最佳組合)_error());
當然,由於 4.1 以上才需要這樣處理,
因此我們可以加上判斷:

$MySQL(和PHP搭配之最佳組合)version = $db->query_first("SELECT VERSION() AS version");
if ($MySQL(和PHP搭配之最佳組合)version[version] >= 4.1)
{
MySQL(和PHP搭配之最佳組合)_query(SET CHARACTER SET utf8) or die("Query failed : " . MySQL(和PHP搭配之最佳組合)_error());
}
這樣以來不管 MySQL(和PHP搭配之最佳組合) 默認編碼是什麼都可以正常存取了……
(不論您是存活期,還是存定期,甚至是零存整取都沒有問題鳥……)

但是,人家都國際化鳥……
您還在用 utf8 行麼?
如何轉碼呢?
還有……
數據升級時出現亂碼怎麼辦?
涼拌!
且聽下回分解……

============================================
數據升級至 4.1

要升級……
就得先導出……
要說老外還真不負責……
以前的導出方式總是弄丟一些中文字符……
比如把“我愛你娘”弄成“我愛你”啦……
(通常是丟失一段數據最末尾的字)
整個兒差了一輩兒……
(用石榴姐的話說就是“這麼大逆不道的事實在是太刺激了”……)
為了保護您脆弱的心髒……
也為了維護中國傳統倫理道義……
您可以把數據包含中文字符的字段改為二進制(Binary)編碼……
具體方法嘛……
可以運行這個語句:

ALTER TABLE `表名` CONVERT TO CHARACTER SET binary;
這樣,那些字符類型字段,如:
CHAR、VARCHAR 和 TEXT
將轉換為
BINARY、VARBINARY 和 BLOB
然後再導出並導入到 4.1 環境中……
當然,最後一項繁瑣的工作是:
你需要把它們的類型再改回來……

有往 4.1 升級的……
當然也有往下降級的……
怎麼降級???
涼鞋去上個廁所……
而您請翻下頁……

=============================================
數據從 4.1 降級

有人發現從4.1導出的 SQL 文件無法導入低版本程序……
問題其實很簡單……
而且 MySQL(和PHP搭配之最佳組合) 已經為我們想好了一切……
導出時請添加 –compatible 參數……
我們假設您的數據庫是 utf8 編碼的……
而且目標數據庫版本為 4.0 ……
那麼命令行下這麼寫:

shell>MySQL(和PHP搭配之最佳組合)dump --user=username --password=password --compatible=MySQL(和PHP搭配之最佳組合)40 --default-character-set=utf8 database > db.sql
這樣導出的 SQL 文件就能夠順利導入低版本數據庫了……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved