程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP也能干大事之PHP中的編碼解碼詳解

PHP也能干大事之PHP中的編碼解碼詳解

編輯:關於PHP編程

      PHP也能干大事之PHP中的編碼解碼詳解

           這篇文章主要介紹了PHP也能干大事之PHP中的編碼解碼詳解,本文講解了ASCII編解碼、URL編解碼、Base64編解碼、HTML實體編解碼、二進制、八進制、十進制、十六進制相互轉換等內容,需要的朋友可以參考下

      寫在前面

      PHP也能干大事是我總結的PHP語法特性及相關函數類庫的經典用法,並不一定是真正能實現四兩撥千斤的功效,但是掌握這些方法,可以在你的工作和學習上有一些幫助,希望大家能集思廣益,將《PHP也能干大事》豐富得更精彩!轉載請注明出處(jb51.net)

      二、前言

      PHP是常見的腳本語言,主要是因為其簡單易學,上手快,幾乎50%以上的Web程序都有PHP的身影(不完全統計)。PHP為開發這提供了豐富的函數和API接口,這使得我們能夠非常方便地使用其強大的內置函數及擴展,本文是《PHP也能干大事》系列的第一篇,主要總結PHP在編解碼、進制轉換方面的知識。

      三、PHP編解碼

      1、ASCII編解碼

      ASCII(發音:英語發音:/ˈæski/ ASS-kee,American Standard Code for Information Interchange,美國信息交換標准代碼)是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語,而其擴展版本EASCII則可以部分支持其他西歐語言,並等同於國際標准ISO/IEC 646。由於萬維網使得ASCII廣為通用,直到2007年12月,逐漸被Unicode取代。 https://zh.wikipedia.org/zh/ASCII

      PHP基本函數內置了ASCII的編解碼函數,這使得我們能輕松進行ASCII編解碼。

      int ord ( string $string ) //返回字符串 string 第一個字符的 ASCII 碼值。

      string chr ( int $ascii ) //返回相對應於 ascii 所指定的單個字符。

      代碼如下:

      

      $str = 'Welcome to China';

      function getNum($string){

      $needle = 0;

      $num = '';

      while (isset($string[$needle])) {

      $num .= $num==0?'':' ';

      $num .= ord($string[$needle]);

      $needle++;

      }

      return $num;

      }

      function getChar($num){

      $num_arr = explode(' ', $num);

      $string = '';

      foreach ($num_arr as $value) {

      $string .= chr($value);

      }

      return $string;

      }

      echo "字符轉ASCII碼n";

      echo getNum($str);

      echo "n";

      echo "ASCII碼字符n";

      echo getChar(getNum($str));

      /* @OUTPUT

      字符轉ASCII碼

      87 101 108 99 111 109 101 32 116 111 32 67 104 105 110 97

      ASCII碼字符

      Welcome to China

      */

      ?>

      2、URL編解碼

      URL編碼是一種浏覽器用來打包表單輸入的格式。浏覽器從表單中獲取所有的name和其中的值,將它們以name/value參數編碼作為URL的一部分或者分離地發給服務器。比如我們在訪問網頁中,會出現很多帶有%的字符串,這就是URL編碼。

      URL編碼一般采用UTF-8編碼格式,所以建議采用UTF-8格式傳遞數據。正常意義的URL編碼可以理解為ASCII碼的16進制前加上%,無大小寫區分。

      代碼如下:

      string urlencode(string $str) //此函數便於將字符串編碼並將其用於URL的請求部分,同時它還便於將變量傳遞給下一頁。空格編碼成 + 。

      string urldecode(string $str) //解碼給出的已編碼字符串中的任何 %XX,加號('+')被解碼成一個空格字符。

      string rawurlencode (string $str) //根據 RFC 3986 編碼指定的字符,空格轉換成%20。

      string rawurldecode (string $str) //返回字符串,此字符串中百分號(%)後跟兩位十六進制數的序列都將被替換成原義字符。 + 不被轉換成空格。

      兩組函數用法一樣,除了對於+和空格的轉換處理上:rawurlencode將空格轉為%20,不將+轉為空格;urlencode則不一樣。

       代碼如下:

      

      $str_arr = array(

      'www.jb51.net',

      'http://www.jb51.net/',

      'PHP也能干大事',

      '!@#$%^&*()_+=-~`[]{}|;:'"<>,./?'

      );

      foreach ($str_arr as $key => $value) {

      echo $value,"t->t",urlencode($value),"n";

      }

      /* @OUTPUT

      www.jb51.net -> www.jb51.net

      http://www.jb51.net/ -> http%3A%2F%2Fwww.jb51.net%2F

      PHP也能干大事 -> PHP%E4%B9%9F%E8%83%BD%E5%B9%B2%E5%A4%A7%E4%BA%8B

      !@#$%^&*()_+=-~`[]{}|;:'"<>,./? -> %21%40%23%24%25%5E%26%2A%28%29_%2B%3D-%7E%60%5B%5D%7B%7D%7C%5C%3B%3A%27%22%3C%3E%2C.%2F%3F

      */

      ?>

      3、Base64編解碼

      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/Base64

      string base64_encode(string $data) //使用 base64 對 data 進行編碼。

      string base64_decode (string $data [, bool $strict = false ]) //對 base64 編碼的 data 進行解碼。

      案例:HTML頁面中img標簽可以在src屬性中采用base64編碼方式,來輸出圖片,這樣可以減少HTTP請求次數。

      復制代碼 代碼如下:

      

      $string = file_get_content('3mc2.png');

      echo ';

      /* @OUTPUT

      UEhQ5Lmf6IO95Yqe5aSn5LqL

      */

      ?>

      4、HTML實體編解碼

      一些字符在HTML中是預留的,擁有特殊的含義,比如小於號「<」用於定義HTML標簽的開始。如果我們希望浏覽器正確地顯示這些字符,我們必須在 HTML 源碼中插入字符實體。字符實體有三部分:一個和號「&」 和一個實體名稱(或者一個 「#」 和一個實體編號),以及一個分號「;」。http://www.ascii.cl/htmlcodes.htm

      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 ‘>'

      string htmlspecialchars_decode (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ]) //此函數的作用和 htmlspecialchars() 剛好相反。它將特殊的HTML實體轉換回普通字符。

      還有功能相同的函數htmlentities/html_entity_decode,這對函數甚至對漢字都進行了HTML實體編碼,而且會產生亂碼,所以建議使用htmlspecialchars進行編解碼。

      案例:防止XSS跨站腳本攻擊,需要對用戶提交的數據進行HTML實體轉換:

       代碼如下:

      

      $_POST['message'] = '測試留言字符'">  

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved