写在前面

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中是预留的,拥有特殊的含义,比如小于号「

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

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‘] = ‘测试留言字符\‘">

if (empty($_POST[‘message‘])) {

exit(‘Message is NULL‘);

}

$message = htmlspecialchars(trim($_POST[‘message‘]));

echo $message;

/* @OUTPUT

测试留言字符‘">

*/

?>

5、二进制、八进制、十进制、十六进制相互转换

进制之间的转换这里没什么好说的,总之都差不多,只要记住多少进制就是逢多少进一位,比如10进制就是9的下一位就是10,二进制、八进制、十六进制以此类推。

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。

6 、GBK、UTF-8字符编码转换

在写代码过程中,经常遇到编码问题而引发的乱码。其实解决编码问题非常简单,只要使用一种编码即可,一般来说,采用万国码——UTF-8是最好的选择。

这里说的编码是文字编码和文件存储的编码,当然,不得不提到系统的编码的差异性:

系统             编码     字符结尾

Windows    GBK     \r\n

*nix             UTF-8   \n

所以在处理特殊字符的时候要特别注意。

常见的编码有GBK、UTF-8等等,函数使用上一般采用两种:

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。

案例:Windows系统,架设了一个WAMP服务器,将如下脚本另存为一个UTF-8编码的php文件,即可通过浏览器查看无乱码的php目录里的文件;如果不是用mb_convert_encoding转码,将直接导致输出乱码(Windows作为服务器)。

<?php

function getDir($dir){

static $string = ‘‘;

if(is_file($dir)){

$string.= $dir;

}else{

$oDir = @opendir($dir);

while($fileName = readdir($oDir)){

if($fileName!=‘.‘ && $fileName!=‘..‘){

if(is_file($dir.‘/‘.$fileName)){

$string.=$fileName."\n";

}elseif(is_dir($dir.‘/‘.$fileName)){

$string.= $dir.‘/‘.$fileName.‘/‘."\n";

getDir($dir.‘/‘.$fileName);

}

}

}

}

return $string;

}

echo mb_convert_encoding( getDir(‘php‘),‘utf8‘, ‘gbk‘ );

?>

四、总结

编码是数据的处理的基础,所以在PHP的编程开发过程中是相当重要的。对于PHP的处理方法,应用在编程中还需要数量掌握,特别有些相似函数要如何区分。转载请注明出处(jb51.net)

原文:http://www.jb51.net/article/64407.htm

%3c%3c在php中 是什么意思,PHP也能干大事之PHP中的编码解码详解相关推荐

  1. PHP和javascript中url编码解码详解

    在实际开发中,我们可能会遇到路径编码解码的问题,下面总结了一下: PHP中: 1.urlencode(编码),urldecode(解码) $a = urlencode('http://www.baid ...

  2. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  3. javascript中的Base64.UTF8编码与解码详解

    javascript中的Base64.UTF8编码与解码详解 本文给大家介绍的是javascript中的Base64.UTF8编码与解码的函数源码分享以及使用范例,十分实用,推荐给小伙伴们,希望大家能 ...

  4. Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略

    Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...

  5. python中unicode编码表_Python中的字符串操作和编码Unicode详解

    本文主要给大家介绍了关于 Python中的字符串操作和编码Unicode的一些知识,下面话不多说,需要的朋友们下面来一起学习吧. 字符串类型 str:Unicode字符串.采用''或者r''构造的字符 ...

  6. 站长在线Python精讲:Python中字符串编码转换encode编码和decode解码详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中字符串编码转换:encode编码和decode解码详解>.本知识点主要内容有:常用编码简介.使用encode( ...

  7. pandas dataframe中的列进行重新排序、倒排、正排、自定义排序详解及实践

    pandas dataframe中的列进行重新排序,pandas dataframe列重排.倒排.正排.自定义排序详解及实践 实施数据构建: import pandas as pd import nu ...

  8. time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解

    今天是边复习边创作博客的第三天,我今年大二,我们专业开的有这门课程,因为喜欢所以更加认真学习,本以为没人看呢,看了后台浏览量让我更加认真创作,这篇博客花了2个半小时的时间,结合自己所学,所思,所想写作 ...

  9. 如何从Spring官网中下载完整的jar包(包含5.2.9版本最新版详解,当然所有版本均可下载)

    快速找到流程 网址: 点击进入Spring官方下载地址 点击进入后应该是 如下图 所示: 然后点击图示中的Spring 点开后 就是 如下图所示,选择 要下载的版本,右键 download. 详解 从 ...

  10. 中yeti不能加载_第二十章_类的加载过程详解

    类的加载过程详解 概述 在 Java 中数据类型分为基本数据类型和引用数据类型.基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载 按照 Java 虚拟机规范,从 Class 文件到加载到内 ...

最新文章

  1. ios开发值json数据文件的存取
  2. 网络空间站是计算机,超级病毒或入侵国际空间站生命维持计算机
  3. 从零开始入门 K8s | etcd 性能优化实践
  4. Javaweb 项目内所有页面都是404问题
  5. 【问题记录】raise IndexError(‘index {} is out of range‘.format(idx)) index 0 is out of range
  6. HarmonyOS之设备传感器的功能和使用
  7. Hive 大小表关联查询异常
  8. 新iPhone XR全配色曝光:苹果你清醒一点 还在搞配色?
  9. 宏基电脑安装系统提示acpi错误_电脑常见问题怎么排除 电脑常见问题排除技巧【详解】...
  10. 基于RV1126平台imx291分析 --- media部件注册 imx291
  11. 《概率论基础教程》总结 -- 样本空间、概率、条件概率 等
  12. Android Ble蓝牙中如何获取RawData ,UUID,Major,Minor,Measured power at 1 meter的数据。
  13. [样本分析] 海莲花CS样本
  14. 软件测试面试题避雷(HR面试题)最常见的面试问题和技巧性答复
  15. Microsoft Visual Studio 2019介绍之使用入门
  16. damon ps2 android,DamonPS2模拟器
  17. [LeetCode] 230. Kth Smallest Element in a BST
  18. 5款免费国外域名邮箱Mail.ru,Yandex,Zoho ,25Mail.St ,Postale申请和使用教程
  19. 20分钟搭建个人网站重置版3.0
  20. Javascript创建沙箱

热门文章

  1. 如何使用Pycharm在网页上展示诗歌。(HTML)
  2. 手机APP与服务器通讯用什么协议?MQTT Server哪家强?
  3. 幼儿园1计算机第一节课教案,幼儿园是孩子人生的第一节课
  4. Docke + Jenkins 实现自动化部署
  5. 【计算机毕业设计】084大型商场会员管理系统
  6. 装3080TI显卡的linux系统显卡驱动安装+pyTorch机器学习环境安装
  7. Cocos使用一张贴图实现3D感星空
  8. Kaggle入门Titanic生存预测 v1.0.0
  9. uml构造型_UML考前准备
  10. 蓝桥杯算法训练-士兵杀敌(Java 和 C++ 代码)