您好,欢迎访问一九零五行业门户网

用正则,从指定起始位置,在源字符串之中截取定长字符串_PHP教程

[代码]用正则, 从指定起始位置, 在源字符串之中截取定长字符串(含中文)[第四版]
[代码]用正则, 从指定起始位置开始, 在源字符串之中截取一定长度的字符串[第四版]
[代码]使用正则表达式, 从指定的起始位置开始, 在源字符串之中截取一定长度的字符串[第四次修正]
[代码]使用正则表达式, 从字符串头部开始, 在源字符串之中截取一定字节长度的字符串
[代码]使用正则表达式, 从指定的起始位置开始, 在源字符串之中截取一定长度的字符串
(btw: 中文编码很复杂也有些不合理的地方 高位是 0xa1-0xfe (不含 0xff 因为 0xff即 255在telnet协议中有重要作用), 低位 0x40-0xfe; 而 gbk 为了和 unicode 映射把高位扩展到了 0x81-0xfe
对于最后字节是否截取错误中文的说明:
最后一个字节,假如截取了中文的一半,那么应该是高位字节,其ascii码大于0x81的。
因为中文的高位字节都是大于0x81的,而低位字节不限。
一个完整的汉字:[0x81-0xfe][0x40-0xfe]
故使用正则表达式,依次取出汉字和非汉字,汉字优先。
最后一个字节,假如截取了中文的一半,那么她将是一个非汉字,而且是汉字的高位字节
而判定这个字节是否在[0x81-0xfe],即可知道是否截取错误。
=0 && $intlen>0 && @preg_match('/^(.{'.$intstart.'})(.{0,'.$intlen.'})/si', $strsource)) {
@preg_match('/^(.{'.$intstart.'})(.{0,'.$intlen.'})/si', $strsource, $regs);
@preg_match_all('/([x81-xfe].|.)/sim', $regs[1], $regs1, preg_pattern_order);
@preg_match('/^[x81-xfe]$/',$regs1[1][count($regs1[1])-1])?$intstart--:0;
@preg_match('/^(.{'.$intstart.'})(.{0,'.$intlen.'})/si', $strsource, $regs);
@preg_match_all('/([x81-xfe].|.)/sim', $regs[2], $regs1, preg_pattern_order);
@preg_match('/^[x81-xfe]$/',$regs1[1][count($regs1[1])-1])?$intlen--:0;
@preg_match('/^(.{'.$intstart.'})(.{0,'.$intlen.'})/si', $strsource, $regs);
$strresult = $regs[2];
}else{
$strresult = ;
}
return $strresult;
}
function preg_substr2($strsource, $intstart=0, $intlen=32)
{
is_int($intlen) ?0:die(len isn't a integer);
is_int($intstart) ?0:die(start isn't a integer);
if ($intstart>=0 && $intlen>=0)
{
$strresult = substr($strsource, 0, $intstart);
@preg_match_all('/([x81-xfe].|.)/sim', $strresult, $regs, preg_pattern_order);
if(@preg_match('/^[x81-xfe]$/',$regs[1][count($regs[1])-1], $regs)){
$intstart--;
}
$strresult = substr($strsource, $intstart, $intlen);
@preg_match_all('/([x81-xfe].|.)/sim', $strresult, $regs, preg_pattern_order);
if(@preg_match('/^[x81-xfe]$/',$regs[1][count($regs[1])-1], $regs)){
$strresult = substr($strsource, $intstart, --$intlen);
}
}
return $strresult;
}
$strhtml = ab
http://www.bkjia.com/phpjc/631416.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/631416.htmltecharticle[代码]用正则, 从指定起始位置, 在源字符串之中截取定长字符串(含中文)[第四版] [代码]用正则, 从指定起始位置开始, 在源字符串之中截取...
其它类似信息

推荐信息