UTF8下的中文PHP編程_PHP教程

來源:互聯網
上載者:User
前言:

說實話,
涼鞋也覺得 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 檔案就能夠順利匯入低版本資料庫了……

http://www.bkjia.com/PHPjc/508616.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/508616.htmlTechArticle前言: 說實話, 涼鞋也覺得 UTF8 是好東西…… 畢竟同屏顯示中日韓對東亞人的吸引力是不小的…… (當然好處不僅是這點啦……) 不僅...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.