首頁 後端開發 PHP問題 php header亂碼問題的相關解決方法總表

php header亂碼問題的相關解決方法總表

Jul 21, 2020 am 11:05 AM
header php

php header亂碼的解決方法:1、在PHP頁面中加入語句「header("Content-type: text/html; charset=utf-8");」;2、使用META標籤設定頁面編碼;3、將PHP頁面編碼進行統一。

php header亂碼問題的相關解決方法總表

php header解決亂碼問題及其他亂碼問題

推薦:《PHP教學

php的header來定義一個php頁面為utf編碼或GBK編碼 

php頁面為utf編碼 

header("Content-type: text/html; charset=utf-8");
登入後複製

php頁面為gbk編碼 

header("Content-type: text/html; charset=gb2312");
登入後複製

php頁面為big5編碼 

header("Content-type: text/html; charset=big5");
登入後複製

通常情況以上程式碼放在php頁面的首頁 

用header或meta實作PHP頁面編碼的差異

#一、頁面編碼 

1. 使用 標籤設定頁面編碼 

#這個標籤的功能是聲明客戶端的瀏覽器用什麼字元集編碼顯示該頁面,xxx可以為GB2312,GBK,UTF-8(和MySQL不同,MySQL是UTF8)等等。因此,大部分頁面可以採用這種方式來告訴瀏覽器顯示這個頁面的時候採用什麼編碼,這樣才不會造成編碼錯誤而產生亂碼。但有的時候我們會 發現有了這句還是不行,不管xxx是哪一種,瀏覽器採用的始終都是一種編碼,這個情況我後面會談到。 

請注意,是屬於html資訊的,只是一個聲明,它起作用表明伺服器已經把HTML資訊傳到了瀏覽器。 

2. header("content-type:text/html; charset=xxx"); 

這個函數header()的功能是把括號裡面的資訊發到http標頭。 

如果括號裡面的內容為文中所說那樣,那作用和標籤基本上相同,大家對照第一個看發現字符都差不多的。但不同的是如果有這段 函數,瀏覽器就會永遠採用你所要求的xxx編碼,絕對不會不聽話,因此這個函數是很有用的。為什麼會這樣呢?那就得說說HTTPS標頭和HTML資訊的差 別了: 

https標頭是伺服器以HTTP協定傳送HTML資訊到瀏覽器前所送出的字串。 

因為meta標籤是屬於html資訊的,所以header()發送的內容先到達瀏覽器,通俗點就是header()的優先權高於meta(不知道可 不行)。加入一個php頁面既有header("content-type:text/html; charset=xxx"),又有 ,瀏覽器就只認前者http標頭而不認meta了。當然這個函數只能在php頁面內使用。 

同樣也留有一個問題,為什麼前者就絕對起作用,而後者有時候就不行?這就是接下來要談的Apache的原因了。 

3. AddDefaultCharset 

Apache 根目錄的 conf 資料夾裡,有整個Apache的設定文件httpd.conf。 

用文字編輯器開啟httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset xxx,xxx為編碼名稱。這行程式碼的意思:設定整個伺服器內的網頁檔案https標頭裡的字元集為你預設的xxx字元集。有這行,就相當於給每個檔案都 加了一行header("content-type:text/html; charset=xxx")。這就明白為什麼明明meta設定了是utf-8,可瀏覽器總是採用gb2312的原因。 

如果網頁裡有header("content-type:text/html; charset=xxx"),就把預設的字元集改為你設定的字元集,所以這個函數永遠有用。如果把AddDefaultCharset xxx前面加個“#”,註解掉這句,而且頁面裡不含header("content-type…"),那這個時候就輪到meta標籤起作用了。

總結: 

來個排序 

header("content-type:text/html; charset=xxx") 
AddDefaultCharset xxx 
<META http-equiv="content-type" content="text/html; charset=xxx">
登入後複製

如果你是web程式設計師,給你的每個頁面都加個header("content-type:text/html ; charset=xxx"),保證它在任何伺服器都能正確顯示,可移植性強。 

至於那句AddDefaultCharset xxx,要不要註解就仁者見仁了。反正我是註解掉了,不過我寫頁子也要寫header(),方便放到伺服器上能正常顯示。

二、資料庫編碼 

PHP 程式在查詢資料庫之前,先執行mysql_query(“SET NAMES xxxx”);其中xxxx 是你網頁的編碼(charset= xxxx),如果網頁中charset=utf8,則xxxx=utf8,如果網頁中charset=gb2312,則xxxx=gb2312,幾乎所有WEB程序,都有一段連接資料庫的公共代碼,放在一個文件裡,在這文件裡,加入mysql_query(“set names”)就可以了。 

SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8'语句告诉服务器“将来从这个客户端传来的信息采用字符集utf-8”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一 个SELECT语句,它表示列值使用了什么字符集。)

PHP页面编码统一

MySQL数据库编码、html页面编码、PHP或html文件本身编码要全部一致。

  1、MySQL数据库编码:建立数据库时指定编码(如gbk_chinese_ci),建立数据表、建立字段、插入数据时不要指定编码,会自动继承数据库的编码。

数据库连接时,也有编码,可以在连接完数据库后,执行

mysql_query(&#39;SET NAMES gbk&#39;);//将gbk换成你的编码,如utf8。
登入後複製

  2、html页面的编码,指的是这一行的设置:

<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
登入後複製

  3、PHP或html文件本身的编码:用editplus打开php文件或html文件,另存时,选择的编码,如果数据库和页面编码是gbk,则这儿的编码选择ansi;如果数据库和页面编码是utf-8,则这儿也选择utf-8。

  4、另外要注意的是,Javascript或Flash中传递的数据是utf-8编码,如果数据库和页面编码是gbk,要进行转码,然后写入数据库。

iconv(&#39;utf-8&#39;, &#39;gbk&#39;, $content);
登入後複製

5、在PHP程序中,可以加上一行,来指定PHP源程序的编码:

header(&#39;Content-type: text/html; charset=gbk&#39;);
登入後複製

以上是php header亂碼問題的相關解決方法總表的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles