首頁 >後端開發 >PHP問題 >apache php亂碼怎麼辦

apache php亂碼怎麼辦

藏色散人
藏色散人原創
2020-07-06 10:45:152459瀏覽

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

apache php亂碼怎麼辦

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

編碼問題

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

 

E:\OpenStudy\www\CSphp

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

 

E:\OpenStudy\www\Electronic Books

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

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

伺服器根目錄:

E:\OpenStudy\www

查閱的相關資料

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應答頭中加入的默認字符集。理論上這將覆蓋在文檔體中透過e8e496c15ba93d81f6ea4fe5f55a2244標籤指定的字元集,但是實際的行為通常取決於使用者瀏覽器的設定。 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

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

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

使用directory-path參數的時候要注意:它們必須與Apache用來存取檔案的檔案系統路徑保持一致。賦予特定7b799fe73e35dcfdc019b13f54de80e5的指令將無法對透過不同路徑指向的同一個目錄檔案生效,例如透過另一個符號連接產生的路徑。

 解決方法

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亂碼怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn