PHP也能干大事之PHP中的编码解码详解
《:PHP也能干大事之PHP中的编码解码详解》要点: 写在前面PHP编程 PHP也能干大事是我总结的PHP语法特性及相关函数类库的经典用法,并不一定是真正能实现四两拨千斤的功效,但是掌握这些办法,可以在你的工作和学习上有一些帮助,希望大家能集思广益,将《PHP也能干大事》丰富得更精彩!转载请注明出处(aspzz.cn)PHP编程 二、前言PHP编程 PHP是常见的脚本语言,主要是因为其简单易学,上手快,几乎50%以上的Web程序都有PHP的身影(不完全统计).PHP为开发这提供了丰富的函数和API接口,这使得我们能够非常方便地使用其强大的内置函数及扩展,本文是《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基本函数内置了ASCII的编解码函数,这使得我们能轻松进行ASCII编解码.PHP编程 int ord ( string $string ) //返回字符串 string 第一个字符的 ASCII 码值.
代码如下:
<?php $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编解码PHP编程 URL编码是一种浏览器用来打包表单输入的格式.浏览器从表单中获取所有的name和其中的值,将它们以name/value参数编码作为URL的一部分或者分离地发给服务器.比如我们在拜访网页中,会出现很多带有%的字符串,这就是URL编码.PHP编程 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则不一样.PHP编程
代码如下:
<?php $str_arr = array( ??? 'www.aspzz.cn', ??? '/', ??? 'PHP也能干大事', ??? '!@#$%^&*()_+=-~`[]{}|;:'"<>,./?' ??? ); foreach ($str_arr as $key => $value) { ??? echo $value,"t->t",urlencode($value),"n"; } /* @OUTPUT www.aspzz.cn? ->??? www.aspzz.cn /? ->??? http%3A%2F%2Fwww.aspzz.cn%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编解码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 进行编码. 案例:HTML页面中img标签可以在src属性中采用base64编码方式,来输出图片,这样可以减少HTTP哀求次数.
代码如下:
<?php $string = file_get_content('3mc2.png'); echo '<img src=',base64_encode($string),'">'; /* @OUTPUT UEhQ5Lmf6IO95Yqe5aSn5LqL */ ?> 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实体编码 string htmlspecialchars_decode (string $string [,int $flags = ENT_COMPAT | ENT_HTML401 ])? //此函数的作用和 htmlspecialchars() 刚好相反.它将特殊的HTML实体转换回普通字符. 案例:防止XSS跨站脚本攻击,需要对用户提交的数据进行HTML实体转换:PHP编程
代码如下:
<?php $_POST['message'] = '测试留言字符'"><sCript src=;'; if (empty($_POST['message'])) { ??? exit('Message is NULL'); } $message = htmlspecialchars(trim($_POST['message'])); echo $message; /* @OUTPUT 测试留言字符'"><sCript src=; */ ?> 5、二进制、八进制、十进制、十六进制相互转换PHP编程 进制之间的转换这里没什么好说的,总之都差不多,只要记住多少进制就是逢多少进一位,比如10进制就是9的下一位就是10,二进制、八进制、十六进制以此类推.PHP编程 string bin2hex (string $str) //返回 ASCII 字符串,为参数 str 的十六进制表示.转换使用字节方式,高四位字节优先. 6 、GBK、UTF-8字符编码转换PHP编程 在写代码过程中,经常遇到编码问题而引发的乱码.其实解决编码问题非常简单,只要使用一种编码即可,一般来说,采用万国码――UTF-8是最好的选择.PHP编程 这里说的编码是文字编码和文件存储的编码,当然,不得不提到系统的编码的差异性:PHP编程 系统???????????? 编码???? 字符结尾 所以在处理特殊字符的时候要特别注意.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. 案例:Windows系统,架设了一个WAMP服务器,将如下脚本另存为一个UTF-8编码的php文件,即可通过浏览器查看无乱码的php目录里的文件;如果不是用mb_convert_encoding转码,将直接导致输出乱码(Windows作为服务器).PHP编程
代码如下:
<?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的处理办法,应用在编程中还需要数量掌握,特别有些相似函数要如何区分.转载请注明出处(aspzz.cn)PHP编程 《:PHP也能干大事之PHP中的编码解码详解》是否对您有启发,欢迎查看更多与《:PHP也能干大事之PHP中的编码解码详解》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |