php中相關亂碼處理

本文的作用是爲了全方位的避免因使用UTF-8編碼而產生的亂碼問題,不包含具體的亂碼解決方案和編碼轉換的內容。對於UTF-8編碼的深入瞭解,請參閱:《PHP匹配UTF-8中文字符的正則表達式》
1、 編輯器:不要使用任何微軟的編輯器,什麼Frontpage,Web Designer,記事本,寫字板什麼的,能丟的全部丟開,因爲這些編輯器會在你的UTF-8文檔前面產生BOM,關於BOM的具體說明,可以在 這裏 找到,當年我直接拿記事本轉UTF-8覆蓋原文件,造成大量代碼損毀,至今記憶猶新。
2、MySQL數據庫:注意建庫,建表,建字段(注意有三處)的時候,都要選用utf8_general_ci的整理格式(Collation),在PHP使用mysql_connect()函數連接數據之後,需要加上一句:
mysql_query('set names "utf8"');

3、PHP:
使用mbstring庫,不要使用iconv庫。
使用preg而不要使用ereg來處理字符。
使用htmlentities()函數,html_entity_decode()函數的時候要帶上第三個參數:

[Copy to clipboard]CODE:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php
$str = "<a href='test'>中文</a>";
echo htmlentities($str,ENT_COMPAT,"UTF-8"); //顯示(源代碼裏面) <a href='test'>涓 枃</a>
echo html_entity_decode(htmlentities($str,ENT_COMPAT,"UTF-8"),ENT_COMPAT,"UTF-8"); // 顯示(源代碼裏面) <a href='test'>中文</a>
?>
這裏再給出一個匹配UTF-8中文字符的正則表達式:

[Copy to clipboard]CODE:<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<?php
$word = "中文";
if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word) == true)
{
echo "很好,這是一個UTF-8編碼的漢字";
}
else
{
echo "抱歉,這不是一個UTF-8編碼的漢字";
}
?>
4、HTML:在<head></head>標籤對裏面加上
<meta http-equiv="Content-Type" c />

5、 JS:JS的問題比較複雜,如果直接將文件存爲UTF-8的編碼,那麼當用戶在直接用瀏覽器訪問這個頁面的時候(也許某些程序員會這麼做),瀏覽器可 能會使用其它的編碼去讀取這個文件而造成其中的UTF-8中文亂碼,當然,這並不會影響到程序的運行。在加載JS的時候,可以說明一下載入JS的編碼,當 然,如果已經在HTML頭裏面聲明瞭編碼,這裏就不是必須的了:
<script type="text/javascript" language="javascript" src="scripts/output.js" charset="UTF-8"></script>

JS要注意的另一個問題是他的escape()函數,在ECMAScript v3中,escape( ) 會被剔除,建議使用encodeURI( )和encodeURIComponent( )。這可以幫助你遠離escape()函數引起的亂碼問題。
6、CSS:在CSS文件的頭部加上這行代碼:
@charset "UTF-8";

7、 URL:爲了讓URL變得更爲友好,許多PHP程序員喜歡讓URL顯示文字而不是URL編碼,目前較爲合理的解決方案是將GET方法發送的數據轉爲 GBK編碼,然後再接受這些數據,如果你希望使用UTF-8直接友好的GET數據,你會在使用PHP的$_GET數組時遇到一些問題。
8、Email:使用UTF-8編碼的字符發送郵件,也是一件讓人頭疼的事情,理想的方法是將編碼轉變爲GBK,然後再發送。
9、Ajax:使用POST的方式發送數據,不要使用GET的方式,不然無法成功發送部分UTF-8中文字符。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章