PHP字符串的编码问题的详细介绍

时间:2024-05-02 17:17:15 

 

    大家都知道,不同字符编码,其在内存占用的字节数不一样。如ASCII编码字符占用1个字节,UTF-8编码的中文字符是3字节,GBK为2个字节。

 

    PHP 也自带几种字符串截取函数,其中常用到的就是 substr 和 mb_substr。

    使用substr截取中文字符时会出现乱码,这是因为substr是按字节来截取的。即UTF-8编码的中文,使用substr截取,只会截取1/3个中文,当然出现乱码了。

    mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )  中的参数$encoding可以指定编码,如果省略,则使用内部字符编码。

  

     如果不清楚字符串的编码格式的话,可以用mb_detect_encoding检查:

    $encoding  = mb_detect_encoding($string, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′)); 

     然后:

     mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )

    如果自己实现mb_substr,效率并不是很好。

编码相关的php函数使用

ord(substr($str, $i, 1)) > 0xa0)

ord($string)返回字符串第一个字符的ASC码,通过这个来判断截取的字符串第一个字符是不是汉字,因为例如gb2312编码的一个文字是2字节,utf8为三个字节。即  编码大于256的就是汉字。


正则字符:

匹配汉字 :   preg_match_all('/[\x80-\xff]?./', $string, $match);  

匹配英文: preg_match_all("/[/x01-/x7f]+/", $string, $match);  


编码转换

iconv ( string $in_charset , string $out_charset , string $str )

 如GB2312  转UTF-8:  iconv("GB2312","UTF-8",$text)


url 编码urlencode


编码后返回的字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号()后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。


不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义。


URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode,另一种是基于UTF-8的Encode。 如:


$url = '中国'; 
echo urlencode($url ); 
//UTF-8: %E4%B8%AD%E5%9B%BD 
//GB2312:%D6%D0%B9%FA 


例如我们使用浏览器打开百度,搜索 “中国”.    在地址栏看到:

http://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=16&rsv_sug=0&rsv_sug4=302&rsv_sug1=11&inputT=22928


即我们看到“中国”被浏览器自动转换为:%E4%B8%AD%E5%9B%BD。



urlencode和rawurlencode的区别:urlencode将空格编码为加号“+”,rawurlencode将空格编码为加号“%20”。 


url解码urldecode 和 rawurldecode

1、在解码时,可以使用相应的 urldecode() 和 rawurldecode(),相应地,rawurldecode() 不会把加号('+')解码为空格,而 urldecode() 可以。

2、urldecode() 和 rawurldecode() 解码出的字符串是 UTF-8格式的编码,如果URL中含有非UTF-8 编码的中文,则要把解码出的字符串进行转换。

如下,先把php文件设置为gb2312编码。你会看到一部分是乱码,一部分是正常的。

$url = '中国';
echo $a = urldecode(urlencode($url)) ,' ';
echo iconv('gb2312', 'utf-8', $a);

�й� 中国


标签:php,字符串编码
0
投稿

猜你喜欢

  • 科讯CMS编辑器会自动更改代码

    2008-12-12 13:00:00
  • python的常见命令注入威胁

    2022-08-14 10:19:21
  • 简单的在线调试服务端js代码的asp源码

    2008-04-23 13:30:00
  • Python安装docx依赖包教程

    2023-02-11 22:23:36
  • 用VB编写ActiveX DLL实现ASP编程

    2008-10-21 21:28:00
  • vue实现引入本地json的方法分析

    2023-07-02 16:32:14
  • python爬虫之百度API调用方法

    2021-11-18 17:17:13
  • MySQL数据库约束操作示例讲解

    2024-01-13 23:47:58
  • Python爬取智联招聘数据分析师岗位相关信息的方法

    2021-04-23 15:01:02
  • Oracle数据库密码文件的使用与维护

    2010-07-28 13:27:00
  • python动态加载变量示例分享

    2022-10-23 18:57:50
  • sql server 2005用户权限设置深入分析

    2024-01-19 12:08:21
  • python命令行模式的用法及流程

    2022-05-01 17:31:13
  • mysql中各种常见join连表查询实例总结

    2024-01-19 05:31:52
  • 如何利用Python打开txt格式的文件

    2022-06-01 02:08:36
  • Python 中使用 PyMySQL模块操作数据库的方法

    2024-01-26 04:23:11
  • Python上下文管理器深入讲解

    2022-02-23 08:50:02
  • MySQL表设计优化与索引 (七)

    2010-10-25 20:06:00
  • js中关于Blob对象的介绍与使用

    2024-04-18 09:49:00
  • python利用Appium实现自动控制移动设备并提取数据功能

    2021-07-05 23:15:21
  • asp之家 网络编程 m.aspxhome.com