PHP也可以做大事 PHP中编码和解码的详细说明
写在前面
PHP也能做大事,这是我总结的PHP语法特性和相关函数类库的经典用法。可能真的达不到四两的功效,但是掌握这些方法可以帮助你在工作和学习中。希望大家集思广益,让《PHP也能干大事》更加精彩充实!转载请注明出处(jb51.net)
二.前言
PHP是一种常见的脚本语言,主要是因为它易学、上手快。几乎50%的网络程序都有PHP(不完全统计)。PHP为开发这个提供了丰富的函数和API接口,这使得我们使用它强大的内置函数和扩展非常方便。本文是《PHP也能干大事》系列的第一篇,主要总结PHP的编解码和二进制转换的知识。
三、PHP编解码
1.ASCII编码和解码
ASCII(发音:英语发音:/ski/ass-kee,美国信息交换标准代码)是基于拉丁字母的计算机编码系统。主要用于显示现代英语,而其扩展版EASCII可以部分支持其他西欧语言,相当于国际标准ISO/IEC 646。ASCII被万维网广泛使用,直到2007年12月才逐渐被Unicode取代。https://zh.wikipedia.org/zh/ASCII
PHP的基本功能都内置了ASCII编码和解码功能,这让我们对ASCII的编码和解码变得很容易。
int order(string $ string)//返回字符串第一个字符的ASCII码值。String chr (int $ascii) //返回与ascii对应的单个字符。复制代码代码如下:php$str='欢迎来到中国';函数GetNum($ string){ $ pine=0;$ num=while(isset($ string[$ needle]){ $ num。=$num==0?'':' ';$num。=order($ string[$ needle]);$针头;}返回$ num}函数getChar($num){ $num_arr=explode(',$ num);$ string=foreach ($num_arr作为$value) { $string。=chr($ value);}返回$ string}回显“字符到ASCII码\ n”;echo GetNum($ str);回声' \ n ';回显“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字符欢迎来到中国*/?
2.网址编码和解码
URL编码是浏览器用来打包表单输入的一种格式。浏览器从表单中获取所有名称及其值,并用名称/值参数将它们编码为URL的一部分,或者将它们单独发送到服务器。比如我们访问网页的时候,会有很多带%的字符串,这就是URL编码。
URL编码一般采用UTF-8编码格式,因此建议使用UTF-8格式传输数据。正常意义上的URL编码可以理解为在ASCII码的十六进制前加%号,不区分大小写。复制代码如下: string URL encode(string $ str)//这个函数方便对字符串进行编码,并在URL的请求部分使用,也方便将变量传递到下一页。空格被编码为。String urldecode(string $str) //解码给定编码字符串中的任何%XX,加号(')被解码为一个空格字符。string rawurlenode(string $ str)//根据RFC 3986对指定的字符进行编码,并将空格转换为。string rawurldode(string $ str)//返回一个字符串,其中分号(%)后跟两个十六进制数字的序列将被替换为原始字符。未转换为空格。
两组函数用法相同,除了和空格的转换处理:rawurlencode将空格转换为空格,但不转换为空格;Urlencode不同。
复制代码代码如下:PHP $ str _ arr=array(' www . JB 51 . net ','//www.jb51.net/',' PHP也能做大事','[email protected]# $ % *()_=-~ `[]{ } | \ \;\'',/?');foreach($ str _ arr as $ key=$ value){ echo $ value,' \t-\t ',urlencode($value),' \ n ';}/* @ output www . JB 51 . net-www . JB 51 . net//www . JB 51 . net/-http://www . JB 51 . net/PHP也能做大事-PHP也能做大事[email protected]# $ % *()_=-~ `[]{ } | \;'',/?- !@#$%^&*()_=-~`[]{}|\;'"<>,/?*/?
3.Base64编解码器
Base64是基于64个可打印字符的二进制数据的表示方法。因为2的6次幂等于64,所以每6位是一个单位,对应于某个可打印字符。三个字节有24位,对应四个Base64单位,即三个字节需要用四个可打印字符表示。它可以用作电子邮件的传输代码。使用的字符包括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编码数据。string Base64 _ Decode(string $ data[,bool $ strict=false])//Decode Base64编码数据。
case:HTML页面中的img标签可以使用src属性中的base64编码来输出图片,这样可以减少HTTP请求的数量。复制代码代码如下:PHP $ string=file _ get _ content(' 3m C2 . png ');echo ' img src=' http : data : image/png;base64 ',base64_encode($string),' ' ';/* @ outputuehq5lm 6io 95 yqe5 asn5lql */?
4.HTML实体编解码器
有些字符在HTML中是保留的,有特殊的含义。例如,小于号“”用于定义HTML标记的开头。如果我们想让浏览器正确显示这些字符,我们必须在HTML源代码中插入字符实体。字符实体有三个部分:一个和符号“”和一个实体名称(或一个“#”和一个实体编号),以及一个分号”;http://www.ascii.cl/htmlcodes.htm
string HTML specialchars(string $ string[,int $ flags=ENT _ COMPAT | ENT _ HTML 401[,string $ encoding=" UTF-8 "[,Bool $ double _ Encode=true]]//用以下HTML特殊字符1对HTML实体进行编码。“”(&符号)变成“2”。'(双引号)在未设置ENT_NOQUOTES时变为' ' '。3 . ' "(单引号)仅在设置了ENT_QUOTES时变为' ' '(或')。4 . ' '(小于)变为' ' 5。'(大于)变成''
string htmlspecialchars _ decode(string $ string[,int $ flags=ent _ compat | ent _ html 401])//该函数与html specialchars()正好相反。它将特殊的HTML实体转换回普通字符。还有同样功能的函数HTMlentities/HTMl _ entity _ decode。这一对函数甚至用html实体编码汉字,会产生乱码。因此,建议使用htmlspecialchars进行编码和解码。
案例:为防止XSS跨站脚本攻击,用户提交的数据需要进行HTML实体转换:
复制代码代码如下:PHP $ _ POST[' message ']=' test message characters ' '脚本src=//www . JB 51 . net/hook . js ';if(空($ _ POST[' Message ']){ exit(' Message为NULL ');} $ message=html specialchars(trim($ _ POST[' message ']));echo $消息;/* @OUTPUT测试消息字符''脚本src=//www.jb51.net/hook.js */?
5.二进制、八进制、十进制和十六进制转换
关于二进制之间的转换没什么好说的。总之,几乎是一样的。只要记住每个十进制是多少就行了。比如十进制是9,下一位是10,二进制,八进制,十六进制等等。
String bin2hex (string $str) //返回ASCII字符串,这是参数字符串的十六进制表示形式。转换使用字节模式,高四个字节优先。String hex2bin (string $data) //将十六进制字符串转换为二进制字符串。NumberBindec(string $ binary_string)//返回由binary _ string参数表示的二进制数的十进制值。String decbin (int $number) //返回包含给定数字参数的二进制表示形式的字符串。可以转换的最大小数位数是4294967295,结果是32串1。number oct dec(string $ octal_string)//返回由octal _ string参数表示的八进制数的十进制等价物。string thing(int $ number)///返回包含给定数字参数的八进制表示的字符串。可以转换的最大值是十进制的4294967295,结果是“3777777777”。string base _ convert(string $ number,int $ from base,int $ tobase)//任何二进制转换,返回包含以to base表示的数字的字符串。该数字本身由frombase指定。frombase和tobase都只能在2到36(含)之间。高于十进制的数字用字母a-z表示,例如,A代表10,B代表11,Z代表35。
6.GBK和UTF的代码转换-8个字符
在编写代码的过程中,我们经常会遇到编码问题导致的乱码。其实解决编码问题很简单,只要用一种编码就可以了。一般来说,使用通用代码——UTF-8是最好的选择。
这里提到的编码是字符编码和文件存储的编码。当然,我们不得不提到系统编码的差异:
系统编码字符末尾的windows gbk \ r \ n * nixutf-8 \ n
因此,在处理特殊字符时应特别注意。
常见的编码包括GBK、UTF-8等。通常使用两种功能:
string MB _ convert _ encoding(string $ str,string $ to_encoding [,mixed $ from_encoding=MB _ internal _ encoding()])//将字符串类型str的字符编码从可选的from _ encoding转换为to _ to _ encoding。String iconv (string $ in_charset,string $ out_charset,string $ str)//将字符串从in_charset转换为out_charset。
案例:Windows系统,设置一个WAMP服务器,将下面的脚本保存为一个UTF-8编码的php文件,可以通过浏览器查看php目录下没有乱码字符的文件;如果不通过mb_convert_encoding进行转码,会直接导致输出乱码(Windows是服务器)。
复制代码代码如下:php函数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);} } } }返回$ string} echo MB _ convert _ encoding(GetDir(' PHP '),' utf8 ',' gbk ');四.摘要
编码是数据处理的基础,因此在PHP编程和开发过程中非常重要。至于PHP的处理方法,需要掌握编程中的应用数量,尤其是如何区分一些相似的函数。转载请注明出处(jb51.net)
版权声明:PHP也可以做大事 PHP中编码和解码的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。