PHP截取字符串

一篇写给自己方便记忆和查询的文章。

PHP截取字符串需要相关字符集,字符编码的知识,并需要知道各自的编码范围。以下是关于gb2312编码中中文截取的一个简单示例。

<?php 
/*
以下字符编码gb2312,页面编码gb2312,汉字编码为两字节

UTF-8编码下汉字为三字节,并需另外考虑汉字编码是0x4e00-0x9fa5
UTF-8编码的字符可能由1~3个字节组成, 具体数目可以由第一个字节判断出来。(理论上可能更长,但这里假设不超过3个字节)
第一个字节大于224的,它与它之后的2个字节一起组成一个UTF-8字符
第一个字节大于192小于224的,它与它之后的1个字节组成一个UTF-8字符
否则第一个字节本身就是一个英文字符(包括数字和一小部分标点符号)。
*/
$str='不T但G';
$len=strlen($str);	//得到按字节计算的长度
$temp="";
for($i=0;$i<$len;$i++){
	if(ord($str[$i])>0xa0){	//GB2312编码中文编码范围高位0xb0-0xf7,低位是0xa1-0xfe,“啊”的字符编码为0xb0a1.为GB2312字符表的第一个。
		$t1=$str[$i];	//半个汉字
		$t2=$str[++$i];	//半个汉字
		$temp=dechex(ord($t1)).' '.dechex(ord($t2));	//输出各个字节的16进制编码值
		echo $temp." ".$t1.$t2."<br>"; //将两个半个汉字拼成一个,通常情况下汉字出现乱码即输出了半个汉字
	}
	else{
		echo ord($str[$i])." ".$str[$i]."<br>";	//若不是中文,输出编码值和字符
	}
}
?>
以下是运行结果:

另请参考:

1.PHP截取字符串专题

2. 字符编码研究
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值