这篇文章主要讲解了“PHP字符串的编码问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP字符串的编码问题有哪些”吧!
,,,大家都知道,不同字符编码,其在内存占用的字节数不一样。如ASCII编码字符占用1个字节,utf - 8编码的中文字符是3字节,GBK为2个字节。
,,,PHP也自带几种字符串截取函数,其中常用到的就是substr和mb_substr。
,,,使用substr截取中文字符时会出现乱码,这是因为字符串的子串是按字节来截取的。即utf - 8编码的中文,使用substr截取,只会截取1/3个中文,当然出现乱码了。
,,,(<代码类=安问? $ str 代码>,<代码类=安问?美元开始代码>(<代码类=安问?,> 代码长度美元[,<代码类=安问? $> 代码编码]]),中的参数美元编码可以指定编码,如果省略,则使用内部字符编码。
,,,,如果不清楚字符串的编码格式的话,可以用mb_detect_encoding检查:
,,,编码,美元=mb_detect_encoding($字符串、数组(“ASCII" & # 39; utf - 8′,“GB2312′,“GBK", & # 39;繁体′));,
,,,,然后:
,,,,(<代码类=安问? $ str 代码>,<代码类=安问?美元开始代码>(<代码类=安问?,> 代码长度美元[,<代码类=安问? $> 代码编码]])
,,,如果自己实现mb_substr,效率并不是很好。
编码相关的php函数使用
<强>奥德(substr (str,我美元,1))比;0 xa0) 强>
<强>正则字符:强>
匹配汉字:,preg_match_all (& # 39;/[\ x80 - \ xff] ?。/& # 39;,字符串,美元与美元);,
匹配英文:preg_match_all (“[/x01 -/x7f] +/?字符串,美元与美元);,
<强>编码转换强>
,(,, <代码类=安问?美元in_charset> 代码,,,,<代码类=安问?美元out_charset> 代码,,,,<代码类=安问? str 代码>,美元)
,如GB2312,转utf - 8:, iconv (“GB2312",“UTF-8",美元文本)
<强> url编码urlencode 强>
编码后返回的字符串中除了,<强> _。强>,之外的所有非字母数字字符都将被替换成百分号(<强> % 强>)后跟两位十六进制数,空格则编码为加号(<强> + 强>)。此编码与WWW表单的帖子数据的编码方式是一样的,同时与,<强>应用程序/x-www-form-urlencoded >强,的媒体类型编码方式一样。
不过应该注意的是,在编码时应该只对部分url编码,否则url中的冒号和反斜杠也会被转义。
urlencode的方式一般有两种,一种是传统的基于GB2312的编码,另一种是基于utf - 8的编码只如:
代码如下:
$ url=& # 39;中国& # 39;,,
回声urlencode ($ url);,
//utf - 8: % E4%B8%AD % E5 % 9 b % BD
//GB2312: % D6%D0%B9%FA
例如我们使用浏览器打开百度,搜索”中国”。,,在地址栏看到:
http://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD& rsv_bp=0, ch=, tn=baidu&酒吧=,rsv_spt=3, ie=utf-8& rsv_sug3=16, rsv_sug=0, rsv_sug4=302, rsv_sug1=11, inputT=22928
即我们看到”中国”被浏览器自动转换为:% E4%B8%AD % E5 % 9 b % BD。
urlencode和rawurlencode的区别:urlencode将空格编码为加号“+”,rawurlencode将空格编码为加号“% 20只
<强> url解码urldecode和rawurldecode 强>
1,在解码时,可以使用相应的urldecode()和rawurldecode()相应地,rawurldecode()不会把加号(& # 39;+ & # 39;)解码为空格,而urldecode()可以。
2, urldecode()和rawurldecode()解码出的字符串是utf - 8格式的编码,如果url中含有非utf - 8编码的中文,则要把解码出的字符串进行转换。
如下,先把php文件设置为gb2312编码。你会看到一部分是乱码,一部分是正常的。
$ url=& # 39;中国& # 39;;
echo $一个=urldecode (urlencode (url)美元),& # 39;& # 39;;
回声iconv (& # 39; gb2312 # 39; & # 39; utf - 8 # 39;,一美元)。
?й吗?中国
感谢各位的阅读,以上就是“PHP字符串的编码问题有哪些”的内容了,经过本文的学习后,相信大家对PHP字符串的编码问题有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
PHP字符串的编码问题有哪些