《PHP學習:PHP也能干大事之PHP中的編碼解碼詳解》要點:
本文介紹了PHP學習:PHP也能干大事之PHP中的編碼解碼詳解,希望對您有用。如果有疑問,可以聯系我們。
寫在前面PHP編程
PHP也能干大事是我總結的PHP語法特性及相關函數類庫的經典用法,并不一定是真正能實現四兩撥千斤的功效,但是掌握這些辦法,可以在你的工作和學習上有一些幫助,希望大家能集思廣益,將《PHP也能干大事》豐富得更精彩!轉載請注明出處(jb51.net)PHP編程
二、前言PHP編程
PHP是常見的腳本語言,主要是因為其簡單易學,上手快,幾乎50%以上的Web程序都有PHP的身影(不完全統計).PHP為開發這提供了豐富的函數和API接口,這使得我們能夠非常方便地使用其強大的內置函數及擴展,本文是《PHP也能干大事》系列的第一篇,主要總結PHP在編解碼、進制轉換方面的知識.PHP編程
PHP編程
三、PHP編解碼PHP編程
1、ASCII編解碼PHP編程
ASCII(發音:英語發音:/??ski/ ASS-kee,American Standard Code for Information Interchange,美國信息交換標準代碼)是基于拉丁字母的一套電腦編碼系統.它主要用于顯示現代英語,而其擴展版本EASCII則可以部分支持其他西歐語言,并等同于國際標準ISO/IEC 646.由于萬維網使得ASCII廣為通用,直到2007年12月,逐漸被Unicode取代. https://zh.wikipedia.org/zh/ASCIIPHP編程
PHP編程
PHP基本函數內置了ASCII的編解碼函數,這使得我們能輕松進行ASCII編解碼.PHP編程
int ord ( string $string ) //返回字符串 string 第一個字符的 ASCII 碼值.
string chr ( int $ascii? ) //返回相對應于 ascii 所指定的單個字符.
PHP編程
2、URL編解碼PHP編程
URL編碼是一種瀏覽器用來打包表單輸入的格式.瀏覽器從表單中獲取所有的name和其中的值,將它們以name/value參數編碼作為URL的一部分或者分離地發給服務器.比如我們在拜訪網頁中,會出現很多帶有%的字符串,這就是URL編碼.PHP編程
URL編碼一般采用UTF-8編碼格式,所以建議采用UTF-8格式傳遞數據.正常意義的URL編碼可以理解為ASCII碼的16進制前加上%,無大小寫區分.
PHP編程
兩組函數用法一樣,除了對于+和空格的轉換處理上:rawurlencode將空格轉為%20,不將+轉為空格;urlencode則不一樣.PHP編程
3、Base64編解碼PHP編程
Base64是一種基于64個可打印字符來表示二進制數據的表示辦法.由于2的6次方等于64,所以每6個位元為一個單元,對應某個可打印字符.三個字節有24個位元,對應于4個Base64單元,即3個字節需要用4個可打印字符來表示.它可用來作為電子郵件的傳輸編碼.使用的字符包括大小寫字母各26個,加上10個數字,和加號「+」,斜杠「/」,一共64個字符,等號「=」用來作為后綴用途.完整的base64定義可見RFC 1421和RFC 2045.編碼后的數據比原始數據略長,為原來的4/3.在電子郵件中,根據RFC 822規定,每76個字符,還需要加上一個回車換行.可以估算編碼后數據長度大約為原長的135.1%. https://zh.wikipedia.org/zh/Base64PHP編程
string base64_encode(string $data)? //使用 base64 對 data 進行編碼.
string base64_decode (string $data [, bool $strict = false ])? //對 base64 編碼的 data 進行解碼.PHP編程
案例:HTML頁面中img標簽可以在src屬性中采用base64編碼方式,來輸出圖片,這樣可以減少HTTP哀求次數.
PHP編程
4、HTML實體編解碼PHP編程
一些字符在HTML中是預留的,擁有特殊的含義,比如小于號「<」用于定義HTML標簽的開始.如果我們希望瀏覽器正確地顯示這些字符,我們必須在 HTML 源碼中插入字符實體.字符實體有三部分:一個和號「&」 和一個實體名稱(或者一個 「#」 和一個實體編號),以及一個分號「;」.http://www.ascii.cl/htmlcodes.htmPHP編程
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = “UTF-8″ [, bool $double_encode = true ]]] )? //對包含如下HTML特殊字符進行HTML實體編碼
1.'&' (ampersand) becomes ‘&'
2.'”‘ (double quote) becomes ‘"' when ENT_NOQUOTES is not set.
3.”‘” (single quote) becomes ‘'' (or ') only when ENT_QUOTES is set.
4.'<‘ (less than) becomes ‘<'
5.'>' (greater than) becomes ‘>'PHP編程
string htmlspecialchars_decode (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ])? //此函數的作用和 htmlspecialchars() 剛好相反.它將特殊的HTML實體轉換回普通字符.
還有功能相同的函數htmlentities/html_entity_decode,這對函數甚至對漢字都進行了HTML實體編碼,而且會產生亂碼,所以建議使用htmlspecialchars進行編解碼.PHP編程
案例:防止XSS跨站腳本攻擊,需要對用戶提交的數據進行HTML實體轉換:PHP編程
5、二進制、八進制、十進制、十六進制相互轉換PHP編程
進制之間的轉換這里沒什么好說的,總之都差不多,只要記住多少進制就是逢多少進一位,比如10進制就是9的下一位就是10,二進制、八進制、十六進制以此類推.PHP編程
string bin2hex (string $str) //返回 ASCII 字符串,為參數 str 的十六進制表示.轉換使用字節方式,高四位字節優先.
string hex2bin (string $data) //轉換十六進制字符串為二進制字符串.
number bindec (string $binary_string) //返回 binary_string 參數所表示的二進制數的十進制等價值.
string decbin (int $number) //返回一字符串,包含有給定 number 參數的二進制表示.所能轉換的最大數值為十進制的 4294967295,其結果為 32 個 1 的字符串.
number octdec (string $octal_string) //返回 octal_string 參數所表示的八進制數的十進制等值.
string decoct (int $number) //返回一字符串,包含有給定 number 參數的八進制表示.所能轉換的最大數值為十進制的 4294967295,其結果為 “37777777777”.
string base_convert (string $number , int $frombase , int $tobase) //任意進制轉換,返回一字符串,包含 number 以 tobase 進制的表示.number 本身的進制由 frombase 指定.frombase 和 tobase 都只能在 2 和 36 之間(包括 2 和 36).高于十進制的數字用字母 a-z 表示,例如 a 表示 10,b 表示 11 以及 z 表示 35.PHP編程
6 、GBK、UTF-8字符編碼轉換PHP編程
在寫代碼過程中,經常遇到編碼問題而引發的亂碼.其實解決編碼問題非常簡單,只要使用一種編碼即可,一般來說,采用萬國碼――UTF-8是最好的選擇.PHP編程
這里說的編碼是文字編碼和文件存儲的編碼,當然,不得不提到系統的編碼的差異性:PHP編程
系統???????????? 編碼???? 字符結尾
Windows??? GBK???? \r\n
*nix???????????? UTF-8?? \nPHP編程
所以在處理特殊字符的時候要特別注意.PHP編程
常見的編碼有GBK、UTF-8等等,函數使用上一般采用兩種:PHP編程
string mb_convert_encoding (string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ])? //將 string 類型 str 的字符編碼從可選的 from_encoding 轉換到 to_encoding.
string iconv (string $in_charset , string $out_charset , string $str)? //將字符串 str 從 in_charset 轉換編碼到 out_charset.PHP編程
案例:Windows系統,架設了一個WAMP服務器,將如下腳本另存為一個UTF-8編碼的php文件,即可通過瀏覽器查看無亂碼的php目錄里的文件;如果不是用mb_convert_encoding轉碼,將直接導致輸出亂碼(Windows作為服務器).PHP編程
編碼是數據的處理的基礎,所以在PHP的編程開發過程中是相當重要的.對于PHP的處理辦法,應用在編程中還需要數量掌握,特別有些相似函數要如何區分.轉載請注明出處(jb51.net)PHP編程
《PHP學習:PHP也能干大事之PHP中的編碼解碼詳解》是否對您有啟發,歡迎查看更多與《PHP學習:PHP也能干大事之PHP中的編碼解碼詳解》相關教程,學精學透。維易PHP學院為您提供精彩教程。