PHP亂碼問題,UTF-8亂碼常見問題小結@ 凝視、散記 - 隨意窩
文章推薦指數: 80 %
例如,您可以從彈出式選單中選取「XHTML 1.0 Transitional」或「XHTML 1.0 Strict」,使HTML 文件與XHTML 相容。
編碼: 會指定文件中字元所用的編碼方式。
如果選取Unicode ...
凝視、散記【散點透視】APersonalCasualNotesconsistofScatteredPerspectivesforLearning,ThinkingandPractices日誌相簿影音好友名片
201402281522PHP亂碼問題,UTF-8亂碼常見問題小結?InfoTech&MgmtPHP亂碼問題,UTF-8亂碼常見問題小結
於HTMLhead指定此頁編碼為UTF-8
3.HTML文件頭BOM問題: 將檔從其他的編碼轉換成UTF-8編碼時,有時候會在檔的最開始加上一個BOM標籤, 在個BOM標籤可能會導致流覽器在顯示中文的時候出現亂碼。
刪除這個BOM標籤的方法: 1.可以用Dreamweaver打開檔,並重新保存,即可以去除BOM標籤! 2.可以用EditPlus打開檔,並在功能表“首選項”->“檔”->"UTF-8標識",設置為:“總是刪除簽名”, 然後保存檔,即可以去除BOM標籤! 4.WEB伺服器UTF-8編碼問題: 如果你按以上所列的步驟做了,還是有中文亂碼問題, 請檢查你的所使用的WEB伺服器的編碼問題 如果你使用的是Apache,請將設定檔裡的:charset設成:utf-8(這裡僅列出方法,具體格式請參考apache的設定檔) 如果你使用的是Nginx,請將nginx.conf裡的:charset設成utf-8, 具體找到"charsetgb2312;"或者類似的語句,改成:“charsetutf-8;”。
二.PHP頁面轉UTF-8編碼問題 1.在代碼開始出加入一行: header("Content-Type:text/html;charset=utf-8"); 2.PHP檔編碼問題 點擊編輯器的功能表:“檔”->“另存為”,可以看到當前檔的編碼,確保檔編碼為:UTF-8, 如果是ANSI,需要將編碼改成:UTF-8。
3.PHP文件頭BOM問題: PHP檔一定不可以有BOM標籤 否則,會出現session不能使用的情況,並有類似的提示: Warning:session_start()[function.session-start]:Cannotsendsessioncachelimiter-headersalreadysent 這是因為,在執行session_start()的時候,整個頁面不能有輸出,但是當由於前PHP頁面存在BOM標籤, PHP把這個BOM標籤當成是輸出了,所以就出錯了! 所以PHP頁面一定要刪除BOM標籤 刪除這個BOM標籤的方法: 1.可以用Dreamweaver打開檔,並重新保存,即可以去除BOM標籤! 2.可以用EditPlus打開檔,並在功能表“首選項”->“檔”->"UTF-8標識",設置為:“總是刪除簽名”, 然後保存檔,即可以去除BOM標籤! 4.PHP以附件形式保存檔的時候,UTF-8編碼問題: PHP以附件形式保存檔,檔案名必須是GB2312編碼, 否則,如果檔案名中有中文的話,將是顯示亂碼: 如果你的PHP本身是UTF-8編碼格式的檔, 需要將檔案名變數由UTF-8轉成GB2312: iconv("UTF-8","GB2312","$filename"); 5.截斷顯示文章標題時,出現亂碼或者“?”問號的問題: 一般文章標題很長的時候,會顯示一部分標題,會對文章標題進行截斷, 由於一個UTF-8編碼格式的中文字元會佔用3個字元寬度, 截取標題的時候,有時會只截取到一個中文字元的1個字元或2字元寬度, 沒截取完整,將出現亂碼或“?”問號的情況, 用下面的函數截取標題,就不會有問題: 複製代碼代碼如下: functionget_brief_str($str,$max_length) { echostrlen($str)."
"; if(strlen($str)>$max_length) { $check_num=0; for($i=0;$i128) $check_num++; } if($check_num%3==0) $str=substr($str,0,$max_length)."..."; elseif($check_num%3==1) $str=substr($str,0,$max_length+2)."..."; elseif($check_num%3==2) $str=substr($str,0,$max_length+1)."..."; } return$str; } 三.MYSQL資料庫使用UTF-8編碼的問題 1.用phpmyadmin創建資料庫和資料表 創建資料庫的時候,請將“整理”設置為:“utf8_general_ci” 或執行語句: CREATEDATABASE`dbname`DEFAULTCHARACTERSETutf8COLLATEutf8_general_ci; 創建資料表的時候:如果是該欄位是存放中文的話,則需要將“整理”設置為:“utf8_general_ci”, 如果該欄位是存放英文或數位的話,預設就可以了。
相應的SQL語句,例如: 複製代碼代碼如下: CREATETABLE`test`( `id`INTNOTNULL, `name`VARCHAR(10)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULL, PRIMARYKEY(`id`) )ENGINE=MYISAM; 2.用PHP讀寫資料庫 在連接資料庫之後: [hide]$connection=mysql_connect($host_name,$host_user,$host_pass); 加入兩行: 複製代碼代碼如下: mysql_query("setcharacterset'utf8'");//讀庫 mysql_query("setnames'utf8'");//寫庫 就可以正常的讀寫MYSQL資料庫了。
四.JS相關的UTF-8編碼問題 1.JS讀Cookie的中文亂碼問題 PHP寫cookie的時候需要將中文字元進行escape編碼, 否則JS讀到cookie中的中文字元將是亂碼。
但php本身沒有escape函數,我們新寫一個escape函數: 複製代碼代碼如下: functionescape($str) { preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r); $ar=$r[0]; foreach($aras$k=>$v) { if(ord($v[0])<128) $ar[$k]=rawurlencode($v); else $ar[$k]="%u".bin2hex(iconv("UTF-8","UCS-2",$v)); } returnjoin("",$ar); } JS讀cookie的時候,用unescape解碼, 然後就解決cookie中有中文亂碼的問題了。
2.外部JS檔UTF-8編碼問題 當一個HTML頁面或則PHP頁面包含一個外部的JS檔時, 如果HTML頁面或則PHP頁面是UTF-8編碼格式的檔, 外部的JS檔同樣要轉成UTF-8的檔, 否則將出現,沒有包含不成功,調用函數時沒有反應的情況。
點擊編輯器的功能表:“檔”->“另存為”,可以看到當前檔的編碼,確保檔編碼為:UTF-8, 如果是ANSI,需要將編碼改成:UTF-8。
五.FLASH相關的UTF-8編碼問題 FLASH內部對所有字串,預設都是以UTF-8處理 1.FLASH讀文普通本檔(txt,html) 要將文字檔的編碼存為UTF-8 點擊編輯器的功能表:“檔”->“另存為”,可以看到當前檔的編碼,確保檔編碼為:UTF-8, 如果是ANSI,需要將編碼改成:UTF-8。
2.FLASH讀XML文件 要將XML檔的編碼存為UTF-8 點擊編輯器的功能表:“檔”->“另存為”,可以看到當前檔的編碼,確保檔編碼為:UTF-8, 如果是ANSI,需要將編碼改成:UTF-8。
在XML第1行寫: 3.FLASH讀PHP返回資料 如果PHP編碼本身是UTF-8的,直接echo就可以了 如果PHP編碼本身是GB2312的,可以將PHP轉存成UTF-8編碼格式的檔,直接echo就可以了 如果PHP編碼本身是GB2312的,而且不允許改檔的編碼格式, 用下麵的語句將字串轉換成UTF-8的編碼格式 $new_str=iconv("GB2312","UTF-8","$str"); 再echo就可以了 4.FLASH讀資料庫(MYSQL)的資料 FLASH要通過PHP讀取資料庫中的資料 PHP本身的編碼不重要,關鍵是如果資料庫的編碼是GB2312的話, 需要用下面的語句將字串轉換成UTF-8的編碼格式 $new_str=iconv("GB2312","UTF-8","$str"); 5.FLASH通過PHP寫資料 一句話,FLASH傳過來的字串是UTF-8格式的, 要轉換成相應的編碼格式,再操作(寫檔、寫資料庫、直接顯示等等) 還是用iconv函數轉換 6.FLASH使用本地編碼(理論上不推薦使用) 如果想讓FLASH不使用UTF-8編碼,而是使用本地編碼 對於中國大陸地區而言,本地編碼是GB2312或GBK AS程式內,可以添加以下代碼: System.useCodepage=true; 那麼FLASH內所有字元都是使用GB2312的編碼了 所有導入到FLASH或者從FLASH匯出的資料,都應該做相應的編碼轉換 因為使用本地編碼,會造成使用繁體中文地區的使用者產生亂碼,所以不推薦使用 ------------------Dreamweaver 網頁編輯器--------------------------------- 設定頁面的標題和編碼方式屬性 標題/編碼方式」頁面屬性選項可讓您根據撰寫網頁所使用的語言,指定專屬的文件編碼方式類型,以及針對該編碼方式類型,指定所要使用的Unicode標準化格式。
選取「修改>頁面屬性」,或按一下文字「屬性」檢視窗中的「頁面屬性」按鈕。
選擇「標題/編碼方式」類別並設定選項。
標題 指定出現在「文件」視窗和大多數瀏覽器視窗標題列中的頁面標題。
文件類型(DTD) 會指定文件類型定義。
例如,您可以從彈出式選單中選取「XHTML1.0Transitional」或「XHTML1.0Strict」,使HTML文件與XHTML相容。
編碼 會指定文件中字元所用的編碼方式。
如果選取Unicode(UTF-8)為文件編碼方式,便不需要再使用實體編碼方式,因為UTF-8可以安全地呈現所有的字元。
但若選取了其他的文件編碼方式,則可能需要實體編碼方式才能夠表示某些字元。
如需字元實體的詳細資訊,請參閱 www.w3.org/TR/REC-html40/sgml/entities.html。
重新載入 可讓您轉換現有文件的編碼方式,或是以新的編碼方式重新開啟文件。
Unicode標準化格式 只會在您選取UTF-8當作文件編碼方式時啟用。
Unicode標準化格式有四種類型。
最重要的一種是「標準化格式C」,因為這是全球資訊網中字元模型(CharacterModel)最常用的格式。
為求完整起見,Adobe也提供其餘三種Unicode標準化格式。
在Unicode中,某些字元看起來很相似,但卻能以不同方式儲存於文件中。
例如,「ë」(e母音變化)可以表示為「e母音變化」單一字元,也可以表示為「一般拉丁字母e」+「組合母音變化」兩個字元。
Unicode組合字元是與前一個字元組合一起使用的字元,因此母音變化可能出現在「拉丁字母e」的上面。
這兩種格式的印刷結果看起來完全一樣,但是儲存至檔案的內容互不相同。
標準化程序是為了確定,能以不同格式來儲存的所有字元全部儲存成相同格式。
也就是說,文件中所有的「ë」字元都儲存成單一的「e母音變化」,或者都儲存成「e」+「組合母音變化」,所以一份文件中不至於同時出現兩種格式。
如需有關Unicode標準化以及可供使用的特定格式之詳細資訊,請查閱Unicode網站,網址為:www.unicode.org/reports/tr15。
包含Unicode簽名(BOM) 可讓您在文件中包含位元順序標記(BOM)。
BOM是位於文字檔開頭處的2到4個位元組,用來識別檔案為Unicode,而且若有BOM的話,也會指出後續位元組的位元順序。
由於UTF-8沒有位元順序,所以加入UTF-8BOM是選擇性的動作。
但對UTF-16和UTF-32而言則是必要的。
【出處】http://help.adobe.com/zh_TW/dreamweaver/cs/using/WS4A31B6A6-8F51-4b2a-AC51-3AA1F6F709A4a.html 【出處】http://www.dotblogs.com.tw/jellycheng/archive/2010/11/18/19533.aspx 【出處】http://www.jb51.net/article/30064.htm Jason/Xuite日誌/回應(1)/引用(0)p-value、顯著水準、Ty...|日誌首頁|胰島素與糖尿病、代謝症候群.....上一篇p-value、顯著水準、TypeIerror,Type2error...下一篇胰島素與糖尿病、代謝症候群...回應 全部展開|全部收合 全部展開|全部收合 累積|今日loading...... 關鍵字 即時新台幣匯率 匯率 COMMODITIES
延伸文章資訊
- 1PHP亂碼問題,UTF-8亂碼常見問題小結@ 凝視、散記 - 隨意窩
例如,您可以從彈出式選單中選取「XHTML 1.0 Transitional」或「XHTML 1.0 Strict」,使HTML 文件與XHTML 相容。 編碼: 會指定文件中字元所用的編碼方式...
- 2記事本中文會自動亂碼? - Microsoft 社群
- 3中文亂碼之《字符編碼:ASCII,Unicode 和UTF-8》 - 程式人生
中文亂碼之《字符編碼:ASCII,Unicode 和UTF-8》. 阿新• • 發佈:2019-01-26. 不同的簡體中文block 怎麽一個默認lock .html 理論 ...
- 4為什麼打開檔案時會看到亂碼?跟著小明一起從傳紙條學習編碼
從亂碼這個問題當作出發點,這篇我想帶大家以比較白話的方式去看為什麼會產生這個問題,以及這個問題該 ... 也能理解「編碼」到底是什麼,例如說ASCII、Unicode 以及UTF-8.
- 5一知半解說亂碼,Unicode,utf-8 和ASCII碼- 台部落
一知半解說亂碼,Unicode,utf-8 和ASCII碼. 原創 da_yun 2018-09-11 07:24. 自學編程的菜鳥一隻。前半片菜鳥總結,後半片,貼了一篇前人博客。