當前位置:首頁 » 編程語言 » apachephp亂碼

apachephp亂碼

發布時間: 2022-04-26 01:12:51

php+mysql+apache 存儲數據出現亂碼

首先,把所有的編碼設置成utf8,尤其是mysql,第二,你用的linux吧,檢查許可權問題。

㈡ 如何解決PHP中文亂碼問題

作為該國家/區域內信息處理的基礎,字元編碼集起著統一編碼的重要作用。字元編碼集按長度分為 SBCS(單位元組字元集),DBCS(雙位元組字元集)兩大類。早期的軟體(尤其是操作系統),為了解決本地字元信息的計算機處理,出現了各種本地化版本 (L10N),為了區分,引進了 LANG, Codepage 等概念。但是由於各個本地字元集代碼范圍重疊,相互間信息交換困難;軟體各個本地化版本獨立維護成本較高。因此有必要將本地化工作中的共性抽取出來,作一 致處理,將特別的本地化處理內容降低到最少。這也就是所謂的國際化(118N)。各種語言信息被進一步規范為 Locale 信息。處理的底層字元集變成了幾乎包含了所有字形的 Unicode。
現在大部分具有國際化特徵的軟體核心字元處理都是以 Unicode 為基礎的,在軟體運行時根據當時的ocale/Lang/Codepage 設置確定相應的本地字元編碼設置,並依此處理本地字元。在處理過程中需要實現 Unicode 和本地字元集的相互轉換,甚或以 Unicode 為中間的兩個不同本地字元集的相互轉換。這種方式在網路環境下被進一步延伸,任何網路兩端的字元信息也需要根據字元集的設置轉換成可接受的內容。
資料庫中的字元集編碼問題
流行的關系資料庫系統都支持資料庫字元集編碼,也就是說在創建資料庫時可以指定它自 己的字元集設置,資料庫的數據以指定的編碼形式存儲。當應用程序訪問數據時,在入口和出口處都會有字元集編碼的轉換。對於中文數據,資料庫字元編碼的設置 應當保證數據的完整性。GB2312、GBK、UTF-8 等都是可選的資料庫字元集編碼;當然我們也可以選擇 ISO8859-1 (8-bit),只是我們得在應用程序寫數據之前先將 16Bit 的一個漢字或 Unicode 拆分成兩個 8-bit 的字元,讀數據之後也需要將兩個位元組合並起來,同時還要判別其中的 SBCS 字元,因此我們並不推薦採用 ISO8859-1 作為資料庫字元集編碼。這樣不但沒有充分利用資料庫自身的字元集編碼支持,而且同時也增加了編程的復雜度。編程時,可以先用資料庫管理系統提供的管理功能 檢查其中的中文數據是否正確。
PHP 程序在查詢資料庫之前,首先執行 mysql_query("SET NAMES xxxx"); 其中 xxxx 是你網頁的編碼(charset=xxxx),如果網頁中 charset=utf8,則 xxxx=utf8,如果網頁中 charset=gb2312,則xxxx=gb2312,幾乎所有 WEB 程序,都有一段連接資料庫的公共代碼,放在一個文件里,在這文件里,加入 mysql_query("SET NAMES xxxx") 就可以了。
定位問題時常用的技巧
定位中文編碼問題通常採用最笨的也是最有效的辦法―在你認為有嫌疑的程序處理後列印 字元串的內碼。通過列印字元串的內碼,你可以發現什麼時候中文字元被轉換成 Unicode,什麼時候Unicode 被轉回中文內碼,什麼時候一個中文字成了兩個 Unicode 字元,什麼時候中文字元串被轉成了一串問號,什麼時候中文字元串的高位被截掉了。
解決各種應用的亂碼問題
使用標簽設置頁面編碼
這個標簽的作用是聲明客戶端的瀏覽器用什麼字元集編碼顯示該頁面,xxx 可以為 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是 UTF8)等等。因此,大部分頁面可以採用這種方式來告訴瀏覽器顯示這個頁面的時候採用什麼編碼,這樣才不會造成編碼錯誤而產生亂碼。但是有的時候我們會 發現有了這句還是不行,不管 xxx 是哪一種,瀏覽器採用的始終都是一種編碼,這個情況我後面會談到。
請注意, 是屬於 HTML 信息的,僅僅是一個聲明,僅表明伺服器已經把 HTML 信息傳到了瀏覽器。
header("content-type:text/html; charset=xxx");
這個函數 header() 的作用是把括弧裡面的信息發到 http 標頭。如果括弧裡面的內容為文中所說那樣,那作用和 標簽基本相同,大家對照第一個看發現字元都差不多的。但是不同的是如果有這段函數,瀏覽器就會永遠採用你所要求的 xxx 編碼,絕對不會不聽話,因此這個函數是很有用的。為什麼會這樣呢?那就得說說 http 標頭和 HTML信息的差別了:
http 標頭是伺服器以 http 協議傳送 HTML 信息到瀏覽器前所送出的字串。而 標簽是屬於 HTML 信息的,所以 header() 發送的內容先到達瀏覽器,通俗點就是 header() 的優先順序高於 (不知道可不可以這樣講)。假如一個 php 頁面既有header("content-type:text/html;charset=xxx"),又有,瀏覽器就只認前者 http 標頭而不認 meta 了。當然這個函數只能在 php 頁面內使用。
AddDefaultCharset
Apache 根目錄的 conf 文件夾里,有整個 Apache 的配置文檔 httpd.conf。
用文本編輯器打開 httpd.conf,第 708 行(不同版本可能不同)有 AddDefaultCharset xxx,xxx為編碼名稱。這行代碼的意思:設置整個伺服器內的網頁文件 http 標頭里的字元集為你默認的 xxx字元集。有這行,就相當於給每個文件都加了一行 header("content-type:text/html; charset=xxx")。這下就明白為什麼明明 設置了是 utf-8,可瀏覽器始終採用 gb2312 的原因。
如果網頁里有 header("content-type:text/html; charset=xxx"),就把默認的字元集改為你設置的字元集,所以這個函數永遠有用。如果把 AddDefaultCharset xxx 前面加個"#",注釋掉這句,而且頁面里不含 header("content-type…"),那這個時候就輪到 meta 標簽起作用了。
下面列出以上的優先順序:
.. header("content-type:text/html; charset=xxx")
如果你是 web 程序員,建議給你的每個頁面都加個header("content-type:text/html;charset=xxx"),這樣就可以保證它在任何伺服器都能正確顯示,可移植性也比較強。
php.ini 中的 default_charset 配置
php.ini 中的 default_charset = "gb2312" 定義了 php 的默認語言字元集。一般推薦注釋掉此行,讓瀏覽器根據網頁頭中的 charset 來自動選擇語言而非做一個強制性的規定,這樣就可以在同台伺服器上提供多種語言的網頁服務。
其實 php 開發中的中文編碼並沒有想像的那麼復雜,雖然定位和解決問題沒有定規,各種運行環境也各不盡然,但後面的原理是一樣的。了解字元集的知識是解決字元問題的 基礎。

㈢ 為什麼我的APACHE總是不支持PHP而且頁面顯示的漢字總是亂碼

亂碼是編碼問題
不支持,linux是要自己裝php的
window的話,你可以直接下載集合包,wamp就挺好的

㈣ 為什麼訪問ubuntu的apache伺服器下的php文件出現亂碼

這不是 apache 的問題。

是 php 本身編碼,或者 資料庫編碼問題。

---------------------------
給你看一篇別人的問題
------------------------
讓人煩惱的 PHP + UTF8 亂碼解決方案
088月2009

一般來說,如果將 各個文件類型,HTML 的 charset , 資料庫連接編碼都設置為 utf8 , 是不會有亂碼問題的

不過我今天著實遇見了一個詭異的事情。

不知道因為什麼原因,伺服器上的Apache被人修改,而我沒有這台伺服器的超級許可權,

導致我的一個項目下面的網站全部亂碼。

打開源文件,沒有亂碼,但是顯示頁面全是亂碼。

將亂碼頁面保存在本地,頁面就顯示正常。

真是怪異。

仔細檢查了一下,所有能設置編碼的地方均為 UTF-8,並且,文件頭部沒有BOM.

我前前後後都想了一遍,著實不知道是什麼什麼原因。

我甚至懷疑,是不是我的 IE8 出問題了。

唉,萬惡的瀏覽器,萬惡的互聯網。

我此刻才深切認識到 當年秦始皇一統天下的 良苦用心。

想了很久,也沒有解決方案。無奈的我,束手無策。

我忽然想,如果我在頁面中加入:

header("Content-type: text/html; charset=utf-8");

會怎麼樣?

php開發手冊中寫道:

header("Content-type: text/html; charset=utf-8");

的作用同

<meta http-equiv="Content-Type" content="text/html; charset=utf8" />

那麼,我加

header("Content-type: text/html; charset=utf-8");

也是多此一舉了。

不過我不甘心,無意中測試了一下。

結果,結果與我想像的結果不一樣,頁面正常了。

㈤ php頁面亂碼原因

詳解PHP頁面亂碼的具體解決辦法 PHP在實際編寫代碼中,會經常出現一些問題,比如頁面出現亂碼等問題。我們接下來將會具體介紹PHP頁面亂碼的產生原因和相關解決方法。一般來說,PHP頁面亂碼的出現有2種原因,首先是由於編碼(charset)設置錯誤,導致瀏覽器以錯誤的編碼來解析,從而出現了滿屏亂七八糟的「天書」,其次是文件被以錯誤的編碼打開,然後保存,比如一個文本文件原先是GB2312編碼的,卻以UTF-8編碼打開再保存。要解決上述PHP頁面亂碼問題,首先需要知道開發中哪些環節涉及到了編碼:1、文件編碼:指的是頁面文件(.html,.php等)本身是以何種編碼來保存的。記事本和Dreamweaver在打開頁面時候會自動識別文件編碼因而不太會出問題。而ZendStudio卻不會自動識別編碼,它只會根據首選項的配置固定以某種編碼打開文件,如果工作時候一不注意,用錯誤編碼打開文件,做了修改之後一保存,亂碼就出現了(我深有體會)。2、頁面申明編碼:在HTML代碼HEAD裡面,可以用來告訴瀏覽器網頁採用了什麼編碼,目前中文網站開發中XXX主要用的是GB2312和UTF-8兩種編碼。3、資料庫連接編碼:指的是進行資料庫操作時候以哪種編碼與資料庫傳輸數據,這里需要注意的是不要與資料庫本身的編碼混淆,比如MySQL內部默認是latin1編碼,也就是說Mysql是以latin1編碼來存儲數據,以其他編碼傳輸給Mysql的數據會被轉換成latin1編碼。知道了WEB開發中哪些地方涉及到了編碼,也就知道了PHP頁面亂碼產生的原因:上述3項編碼設置不一致,由於各種編碼絕大部分是兼容ASCII的,所以英文符號不會出現,中文就倒霉了。下面是一些常見的錯誤情況與解決:1、資料庫採用UTF8編碼,而頁面申明編碼是GB2312,這是最常見的產生亂碼的原因。這時候在PHP腳本裡面直接SELECT數據出來的就是PHP頁面亂碼,需要在查詢前先使用:mysql_query("SET NAMES GBK"); 來設定MYSQL連接編碼,保證頁面申明編碼與這里設定的連接編碼一致(GBK是GB2312的擴展)。如果頁面是UTF-8編碼的話,可以用:mysql_query("SET NAMES UTF8"); 注意是UTF8而不是一般用的UTF-8。假如頁面申明的編碼與資料庫內部編碼一致可以不設定連接編碼。註:事實上MYSQL的數據輸入輸出比上面講的更復雜一些,MYSQL配置文件my.ini中定義了2個默認編碼,分別是[client]里的default-character-set和[mysqld]里的default-character-set來分別設定默認時候客戶端連接和資料庫內部所採用的編碼。我們上面指定的編碼其實是MYSQL客戶端連接伺服器時候的命令行參數character_set_client,來告訴MYSQL伺服器接受到的客戶端數據是什麼編碼的,而不是採用默認編碼。2、頁面申明編碼與文件本身編碼不一致,這種情況很少發生,因為如果編碼不一致美工做頁面時候在瀏覽器看到的就是亂碼了。更多時候是發布以後修改一些小BUG,以錯誤編碼打開頁面然後保存導致的。或者是用某些FTP軟體直接在線修改文件,比如CuteFTP,由於軟體編碼配置錯誤而導致轉換錯了編碼。3、一些租用虛擬主機的朋友,明明上述3項編碼都設置正確了還是有PHP頁面亂碼。比方說網頁是GB2312編碼的,IE等瀏覽器打開卻總是識別成UTF-8,網頁HEAD裡面已經申明是GB2312了,手動修改瀏覽器編碼為GB2312後頁面顯示正常。產生原因是伺服器Apache設定了伺服器全局的默認編碼,在httpd.conf裡面加了AddDefaultCharset UTF-8。這時候伺服器會首先發送HTTP頭給瀏覽器,其優先順序比頁面里申明編碼高,自然瀏覽器就識別錯了。解決辦法有2個,請管理員在配置文件自己的虛機里加上一條AddDefaultCharset GB2312來覆蓋全局配置,或者在自己目錄的.htaccess里配置

㈥ 為什麼我的php輸出的中文是亂碼

是你的頁面
編碼
有問題!
你這個是不是
還沒有用到
資料庫
啊?
那應該就是
你的
IE瀏覽器的
編碼
跟你
頁面的編碼不統一!
你應該先判斷你的
頁面是
什麼編碼
然後再把
IE的編碼換成
你的頁面
編碼!那就可以了!

㈦ php文件echo輸出中文亂碼,apache要怎樣設置

輸出亂碼在apache中解決不了,應該在頁面中
頭部
charset=utf8
或者charset=gb2312
如果涉及到資料庫
還應該在my.ini中設置。
當然有時候也可能是瀏覽器的編碼,點右鍵
編碼:utf8或者gb2312或者其他

㈧ linux下apache2和php亂碼問題

# # 完全原創 # #
windows上倒是遇見過很多中亂碼,但有些部分應該是差不多的。有參考其他資料,但沒有直接復制大段文字,是自己一點點總結出來的。希望能夠幫到你。影響因素較多,一一列出1. apache的httpd.conf中有默認編碼的設置 ,例如 AddDefaultCharset utf-8,這個會有一定影響
2. php的php.ini中也有默認編碼的設置,例如default_charset = "utf-8",只能有一個默認編碼
3. 資料庫欄位使用的編碼:如果是Latin很容易亂碼的
4. php源代碼文件的編碼:源代碼在開發過程中,文本存為文件本身也是有編碼方式的。
5. php代碼中使用header控制編碼(可以省略)
<?php
header(「Content-Type: text/html; charset=utf-8");
?>
6. 網頁前台的編碼
html代碼中的meta <meta http-equiv="content-type" content="text/html;charset=utf-8">
實際應用中,改變伺服器設置不現實,尤其是租伺服器,主機提供商不會幫你改的
因此,從3456入手,而且各個部分應該一直、匹配。
也就是說,資料庫用了utf-8,那麼源碼也存成utf-8,網頁前台也content="text/html;charset=utf-8"附加說明:
第4點:
一般IDE(例如ZendStudio)是可以指定代碼編碼的,但是有一些例外:
使用Win7的記事本修改後,存為utf-8,會加入windows特有的utf-8標記「BOM」,這是微軟為了標記編碼在文件頭加的額外信息,這樣的源代碼被執行後,BOM會發往客戶端!客戶端收到的網頁開頭是亂的,因為BOM打亂了內容編碼的解析
在Mac上使用編輯工具修改源代碼後,代碼的存儲編碼會發生較大變化,本人在於團隊合作過程中也因此出現較多問題,不推薦使用系統(win/mac)自帶的一些文本編輯工具(即使他們有代碼高亮或代碼提示)
使用成熟的IDE是很不錯的辦法第5點:
用header控制編碼要注意和其他設置頭(header)的操作的前後關系,容易導致 「無法修改已發送的頭」的錯誤
用這個其實有時候實屬無奈,但很有效第6點:
請把<meta http-equiv="content-type" content="text/html;charset=utf-8"> 放到<title></title>之前!!
因為如果title包含中文,很可能悲劇。本人遇到過兩次整站直接空白無法顯示出來的問題,就是因為次序問題。

熱點內容
易語言灰鴿子源碼 發布:2025-07-15 17:37:08 瀏覽:868
編程代碼怎麼寫 發布:2025-07-15 17:30:45 瀏覽:120
光遇安卓九游服怎麼切換賬號 發布:2025-07-15 17:29:07 瀏覽:916
sqlserverce 發布:2025-07-15 17:20:27 瀏覽:712
海量數據的存儲管理 發布:2025-07-15 17:16:51 瀏覽:658
安卓手機哪個版本適合玩游戲 發布:2025-07-15 17:12:31 瀏覽:57
安裝flexlinux 發布:2025-07-15 16:35:47 瀏覽:372
網站模板php 發布:2025-07-15 16:22:47 瀏覽:248
編譯簡譜 發布:2025-07-15 16:16:37 瀏覽:813
編程口是什麼 發布:2025-07-15 16:11:28 瀏覽:497