當前位置:首頁 » 編程語言 » php獲取編碼

php獲取編碼

發布時間: 2025-07-19 18:27:29

『壹』 php中文編碼~~

一、頁面編碼

1. 使用 <META http-equiv="content-type" content="text/html; charset=xxx"> 標簽設置頁面編碼

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

請注意,<meta>是屬於html信息的,僅僅是一個聲明,它起作用表明伺服器已經把HTML信息傳到了瀏覽器。

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

這個函數header()的作用是把括弧裡面的信息發到http標頭。

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

https標頭是伺服器以HTTP協議傳送HTML信息到瀏覽器前所送出的字串。

因為meta標簽是屬於html信息的,所以header()發送的內容先到達瀏覽器,通俗點就是header()的優先順序高於meta(不知道可不可以這樣講)。加入一個php頁面既有header("content-type:text/html; charset=xxx"),又有<META http-equiv="content-type" content="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標簽起作用了。

4. default_charset

在 php.ini 文件中可以定義 php 的默認語言: default_charset = "xxx",xxx為編碼名稱。這行代碼的意思是設置所有 php 的輸出頁面編碼為 xxx。

總結:

以上 4 種編碼設置方法的優先順序如下:

header("content-type:text/html; charset=xxx")
default_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語句,它表示列值使用了什麼字元集。)

三、中文文件名

默認情況下,文件名為中文時不能訪問。要使中文文件名能正常訪問,需進行如下設置:

在ie中選擇 工具 -> internet選項 -> 高級 -> 取消「總是以UTF-8發送URL」。

『貳』 PHP實現URL編碼、Base64編碼、MD5編碼的方法

今天開始福哥要給大家講解關於字元編碼的知識,所謂字元編碼就是將一個字元串或者是一個二進制位元組數組裡面的每一個字元根據一定的規則替換成一個或者多個其他字元的過程。

字元編碼的意義有很多種,有的是為了將一些不可見的字元以可見字元替代保證可見度;有的是為了以少數字元去描述更多的其他字元便於傳遞數據;還有的是為了將不定長的字元串轉成定長的規則字元串來實現字元串加密的目的。

編碼,英文是Encode,意思是從一個原始的字元串根據編碼規則轉換成一段新的字元串的過程。編碼後的字元串裡面的字元會更加統一,或者更加單一,甚至會變成固定長度。

解碼,英文是Decode,和編碼正好相反,意思是從一段已經編碼後的字元串還原成編碼前的原始字元串的過程。並不是所有的經過編碼規則進行編碼後的字元串都可以解碼會原始字元串的,能夠解碼回來的編碼方式稱之為可逆編碼方式,不能夠解碼回來的編碼方式稱之為不可逆編碼方式。

URL編碼規則是這樣的,首先按順序取出字元串當中的每一個字元,將字元轉換為ASCII碼的十六進制數值,然後在十六進制數值前面加上一個百分號「%」,最後把每一個字元編碼後的組合拼接起來就完成了。而解碼規則就是反過來,將編碼後的字元串以百分號「%」拆分開,然後將每個十六進制數值轉換回ASCII碼,最後在拼接到一起就好了。

需要注意的GBK的字元串和UTF-8的字元串在進行URL編碼後得到的字元串是不一樣的,例如:GBK的「福哥」編碼後是「%B8%A3%B8%E7」,而UTF-8的「福哥」編碼後是「%E7%A6%8F%E5%93%A5」。

PHP提供了一個專門用來完成URL編碼的函數urlencode,使用也非常簡單,傳入原始字元串,返回編碼後的字元串。

PHP提供了一個專門用來完成URL解碼的函數urldecode,使用也很簡單,傳入編碼後的字元串,返回原始字元串。

Base64編碼就是基於64個可見字元將任何十進制字元或者二進制位元組轉換成這些字元的過程,64個字元包括大小寫字母和十個數字以及「+」和「/」,通常情況下「=」用來放在最後補位使用。

Base64編碼方式同樣受GBK或者UTF-8的影響,GBK的「福哥」的Base64碼是「uKO45w==」,而UTF-8的「福哥」的Base64碼是「56aP5ZOl」。

PHP提供了一個專門用來完成Base64編碼的函數base64_encode,使用也非常簡單,傳入原始字元串,返回編碼後的字元串。

PHP提供了一個專門用來完成Base64解碼的函數base64_decode,使用也很簡單,傳入編碼後的字元串,返回原始字元串。

MD5是一種不可逆的編碼,它採用摘要信息拼湊的方式可以將任意長度的十進制字元串或者二進制位元組轉換成固定32位長度的只包含小寫字母的字元串。

通常情況下,MD5編碼用來實現大數據的比較使用,MD5編碼方式同樣受GBK或者UTF-8的影響,GBK的「福哥」的MD5碼是「」,而UTF-8的「福哥」的MD5碼是「」。

PHP提供了一個專門用來完成MD5編碼的函數md5,函數名稱很直觀,使用也非常簡單,傳入原始字元串,返回編碼後的字元串。

今天福哥帶著童鞋們了解了關於URL編碼、Base64編碼和MD5編碼的知識,學會了在PHP語言當中使用這三種編碼方式的技巧,一般情況下,學會這三種編碼方式就足以應付絕大多數的場景下的數據編碼的需要了。

下一課福哥將介紹在Python語言裡面實現這三種編碼方式的技巧,敬請期待~

『叄』 php有沒有查看當前的編碼方式的方法

編碼問題是解碼者決定的,數據本身並不指明編碼方式,而是讀數據的解碼者選擇自己的解碼方式
此處,php程序是數據本身,php解釋器是解碼者本身,
php解釋器對php程序的編碼方式並不應人類對php程序的編碼方式理解不同而轉移
因此,理論上不存在獲取當前數據編碼方式的介面,只要當時的編碼者(譬如人類)顯示指明編碼方式,
解碼者(譬如php解釋器)方可獲知

即使在解析以後再人類看來是一片亂碼,PHP認為一切都是正確的.

當然從前端獲取來的字元例外

如果不清楚字元串的編碼格式的話,就可以將這段字元這樣檢查:
$encode=mb_detect_encoding($string,array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));
echo$encode;
這樣就能知道它是什麼編碼的了。後續操作還可以為其轉碼:
if($encode==「UTF-8″){
$string=iconv("UTF-8″,"GBK",$string);
}

『肆』 phpurlencode()與urldecode()函數字元編碼原理詳解

PHP中的urlencode和urldecode函數字元編碼原理如下

urlencode函數原理:將字元串中的非字母數字字元轉換為十六進制形式,並在每個字元前加上百分號進行標識。空格字元被編碼為加號,遵循標準的URL編碼格式。 應用:主要用於將包含特殊字元的字元串編碼為URL兼容的格式,以確保數據在URL傳遞過程中的完整性和兼容性。

urldecode函數原理:將已編碼的URL字元串中的十六進制字元解碼為原始字元。具體過程是通過去掉百分號,將剩餘的十六進制數轉換為十進制數,再用chr函數將十進制數轉換回對應的字元。 應用:用於解碼使用urlencode函數編碼的URL字元串,還原為原始字元串。

總結: urlencode和urldecode函數是PHP中處理URL編碼和解碼的重要工具。 urlencode將非字母數字字元轉換為URL兼容的十六進制格式,而urldecode則將這些十六進制格式還原為原始字元。 這兩者的核心原理是基於字元的十六進制轉換和特定規則的組合應用。

熱點內容
哈斯編程 發布:2025-07-19 22:42:41 瀏覽:799
天貓精靈設置密碼是多少 發布:2025-07-19 22:36:19 瀏覽:622
phppng透明 發布:2025-07-19 22:34:17 瀏覽:390
王者榮耀怎麼配置好玩 發布:2025-07-19 22:02:45 瀏覽:755
合肥市編程 發布:2025-07-19 21:56:40 瀏覽:652
方舟手游火影伺服器怎麼進 發布:2025-07-19 21:44:06 瀏覽:540
學校安防存儲系統 發布:2025-07-19 21:20:49 瀏覽:283
linux紅帽下載 發布:2025-07-19 21:16:00 瀏覽:541
人員怎麼配置 發布:2025-07-19 21:10:10 瀏覽:208
明日之後如何掃碼登伺服器 發布:2025-07-19 20:36:26 瀏覽:243