本文的作用是為了全方位的避免因使用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()函式的時候要帶上第三個引數:
code:
<?php
$str = "中文";
echo htmlentities($str,ent_compat,"utf-8"); //顯示(源**裡面) 涓枃
echo html_entity_decode(htmlentities($str,ent_compat,"utf-8"),ent_compat,"utf-8"); // 顯示(源**裡面) 中文
?>
這裡再給出乙個匹配utf-8中文字元的正規表示式:
code:
<?php
$word = "中文";
if (preg_match("/^([".chr(228)."-".chr(233)."][".chr(128)."-".chr(191)."][".chr(128)."-".chr(191)."])/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."][".chr(128)."-".chr(191)."][".chr(128)."-".chr(191)."])$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."][".chr(128)."-".chr(191)."][".chr(128)."-".chr(191)."])/",$word) == true)
else
?>
4、html:在標籤對裡面加上
js要注意的另乙個問題是他的escape()函式,在ecmascrīpt 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中文字元。
utf8 和 UTF 8 在使用中的區別
在使用中常常遇到utf 8和utf8,現在終於弄明白他們的使用不同之處了,現在來和大家分享一下,下面我們看一下utf8 和 utf 8 有什麼區別 utf 8 是標準寫法,php在windows下邊英文不區分大小寫,所以也可以寫成 utf 8 utf 8 也可以把中間的 省略,寫成 utf8 一般程...
utf8 和 UTF 8 在使用中的區別
在使用中常常遇到utf 8和utf8,現在終於弄明白他們的使用不同之處了,現在來和大家分享一下,下面我們看一下utf8 和 utf 8 有什麼區別 utf 8 是標準寫法,php在windows下邊英文不區分大小寫,所以也可以寫成 utf 8 utf 8 也可以把中間的 省略,寫成 utf8 一般程...
utf8 和 UTF 8 在使用中的區別
在使用中常常遇到utf 8和utf8,現在終於弄明白他們的使用不同之處了,現在來和大家分享一下,下面我們看一下utf8 和 utf 8 有什麼區別 utf 8 是標準寫法,php在windows下邊英文不區分大小寫,所以也可以寫成 utf 8 utf 8 也可以把中間的 省略,寫成 utf8 一般程...