apache php亂碼怎麼辦

2020-07-16 10:06:23

apache php亂碼的解決辦法:首先注釋掉「php.ini」中的程式碼;然後將主目錄語言修改為「AddDefaultCharset utf-8」;接著將需要的資料夾更改編碼方式;最後重新啟動apache即可。

PHP顯示亂碼和apache內部編碼問題的解決

編碼問題

PHP預設的編碼是utf-8,測試時候為了方便不去寫html程式碼的meta標記也不會出現亂碼

E:OpenStudywwwCSphp

而我下載的幫助文件的html版本電子資料需要的是gb2312的設定

E:OpenStudywwwElectronic Books

開始設定伺服器的時候,php採用的是大家共同推薦的utf-8的編碼方式

[php.ini]
default_charset = "UTF-8"

伺服器根目錄:

E:OpenStudywww

查閱的相關資料

AddDefaultCharset 指令
說   明 當應答內容是text/plain或text/html時,在HTTP應答頭中加入的預設字元集
語   法 AddDefaultCharset On|Off|charset
預設值 AddDefaultCharset Off
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀   態 核心(C)
模   塊 core

當且僅當應答內容是text/plain或text/html時,此指令將會在HTTP應答頭中加入的預設字元集。理論上這將覆蓋在文件體中通過<meta>標籤指定的字元集,但是實際的行為通常取決於使用者瀏覽器的設定。AddDefaultCharset Off 將會禁用此功能。AddDefaultCharset On 將啟用Apache內部的預設字元集iso-8859-1 。您也可以指定使用在IANA註冊過的字元集名字中的另外一個charset 。比如說:

AddDefaultCharset utf-8

AddDefaultCharset只應當在如下情況下使用:所有文字資源都使用同一種確定的字元集,且分別標記他們的字元集非常麻煩。一個這樣的例子是向包含動態內容的資源中新增字元集引數(比如先前遺留的CGI指令碼),這樣可能會因為在輸出中包含使用者提供的資料而導致跨站點指令碼攻擊。但是請注意:更好的解決辦法是修改或刪除這些指令碼,因為設定了預設的字元集以後將會使得瀏覽器的字元集自動探測功能失效。

AddCharset 指令
說明 在給定的副檔名與特定的字元集之間建立對映
語法 AddCharset charset extension [extension] ...
作用域 server config, virtual host, directory, .htaccess
覆蓋項 FileInfo
狀態 基本(B)
模組 mod_mime

AddCharset指令在特定的副檔名與特定的字元集之間建立對映。charset是以extension為擴充套件名的檔案的MIME字元集引數。這個對映關係會強制新增在所有現存的對映關係上,並覆蓋所有現存的extension擴充套件名對映。

AddLanguage ja .ja
AddCharset EUC-JP .euc
AddCharset ISO-2022-JP .jis
AddCharset SHIFT_JIS .sjis

有了以上定義以後,文件xxxx.ja.jis會被當成是使用字元集ISO-2022-JP的日文文件(文件xxxx.jis.ja也一樣)。AddCharset指令除了用於通知用戶端文件的字元集編碼方式以便正確地翻譯和顯示以外,還用於內容協商(根據使用者的優先選擇資訊,從幾個文件中選擇一個返回給使用者)。

<Directory> 指令
說   明 封裝一組指令,使之僅對檔案空間中的某個目錄及其子目錄生效
語   法 <Directory directory-path> ... </Directory>
作用域 server config, virtual host
狀   態 核心(C)
模   塊 core

<Directory>和</Directory>用於封裝一組指令,使之僅對某個目錄及其子目錄生效。任何可以在"directory"作用域中使用的指令都可以使用。Directory-path可以是一個目錄的完整路徑,或是包含了Unix shell匹配語法的萬用字元字串。在萬用字元字串中,"?"匹配任何單個的字元,"*"匹配任何字元序列。您也可以使用"[]"來確定字元範圍。以上萬用字元都不能匹配"/"字元。所以<Directory /*/public_html>將無法匹配/home/user/public_html ,但<Directory /home/*/public_html>能夠正確匹配。比如說:

<Directory /usr/local/httpd/htdocs> 
  Options Indexes FollowSymLinks 
</Directory>

使用directory-path引數的時候要注意:它們必須與Apache用於存取檔案的檔案系統路徑保持一致。賦予特定<Directory>的指令將無法對通過不同路徑指向的同一個目錄檔案生效,比如說通過另外一個符號連線生成的路徑。

解決方法

1.注釋掉php.ini中的程式碼

[php.ini]
;default_charset = "UTF-8"

2.將主目錄語言修改為

AddDefaultCharset  utf-8

將需要的資料夾【E:/OpenStudy/www/Electronic Books】更改編碼方式

<Directory "E:/OpenStudy/www/Electronic Books">
  AddDefaultCharset gb2312
</Directory>

修改完成,重新啟動apache,大功告成

很多相關知識,請存取PHP中文網

以上就是apache php亂碼怎麼辦的詳細內容,更多請關注TW511.COM其它相關文章!