未分类

截取粤语字符串,1.len参数以汉语字符为规范

14 4月 , 2020  

以下代码试用于GB2312编码,截取中文字符串是PHP中叁个胃痛的难题,消逝方式是遵照值是还是不是高于等于128来判别是还是不是是双字节字符,防止止现身乱码的境况。但中意大利语混合、特殊符号等主题材料总是存在,将来写二个相比较完美的,仅供参谋:
程序表达:
1.len参数以汉语字符为专门的学问,1len万分2个保加澳门语字符,为了形式上窘迫些
2.一旦将magic参数设为false,则普通话和韩文同等待遇,取绝对的字符数
3.特意适用于用htmlspecialchars(卡塔尔举办过编码的字符串
4.能准确管理GB2312中实体字符情势 程序代码:
functionFSubstr($title,$start,$len=””,$magic=true卡塔尔 { /**
*poweredbySmartpig *mailto:d.einstein@263.net */ $length=0;
if$len=strlen; //判定起先为不许确地方 if { $cnum=0; for {
if(ord>=128卡塔尔$cnum++; } if$start–; unset; } ifreturnsubstr; $alen=0;
$blen=0; $realnum=0; for($i=$start;$i”State of Qatar { $cstep=4; $length+=4; $i+=3;
$realnum++; if { $alen++; } } elseif==”&”卡塔尔(قطر‎ { $cstep=5; $length+=5;
$i+=4; $realnum++; if { $alen++; } } elseif==”””State of Qatar { $cstep=6;
$length+=6; $i+=5; $realnum++; if { $alen++; } } elseif==”‘”) {
$cstep=6; $length+=6; $i+=5; $realnum++; if { $alen++; } }
elseif;/i”,substr { $cstep=strlen; $length+=strlen; $i+=strlen-1;
$realnum++; if { $blen++; $ctype=1; } } }else{ if { $cstep=2;
$length+=2; $i+=1; $realnum++; if { $blen++; $ctype=1; } }else{
$cstep=1; $length+=1; $realnum++; if { $alen++; } } } if { if==break;
if== { if { $length-=$cstep; break; }else{ break; } } }else{ ifbreak; }
} unset; unset; unset; unset; unset;
returnsubstr($title,$start,$length卡塔尔; }

此函数用于截取gb2312编码的国语字符串:

 代码如下

<?php
// 表达:截取普通话字符串
 
function mysubstr($str, $start, $len) {
    $tmpstr = “”;
    $strlen = $start + $len;
    for($i = 0; $i < $strlen; $i++) {
        if(ord(substr($str, $i, 1)) > 0xa0) {
            $tmpstr .= substr($str, $i, 2);
            $i++;
        } else
            $tmpstr .= substr($str, $i, 1);
    }
    return $tmpstr;
}
?>

Utf-8、gb2312都支持的方块字截取函数

截取utf-8字符串函数

为了扶持多语言,数据Curry的字符串大概保留为UTF-8编码,在网址开辟中恐怕须要用php截取字符串的一片段。为了幸免现身乱码现象,编写如下的UTF-8字符串截取函数

至于utf-8的原理请看 UTF-8 FAQ

UTF-8编码的字符也许由1~3个字节组成,
具体数目能够由第多少个字节决断出来。(理论上只怕越来越长,但这里假诺不超越3个字节卡塔尔(قطر‎
第一个字节大于224的,它与它之后的2个字节一同组成四个UTF-8字符
第多少个字节大于192紧跟于224的,它与它之后的1个字节组成三个UTF-8字符
不然第叁个字节本人正是贰个斯洛伐克共和国语字符(蕴含数字和一小部分标点符号)。

 代码如下

<?php
// 表明:Utf-8、gb2312都补助的方块字截取函数
 
/*
Utf-8、gb2312都匡助的汉字截取函数
cut_str(字符串, 截取长度, 开头长度, 编码卡塔尔国;
编码默以为 utf-8
始于长度默以为 0
*/
 
function cut_str($string, $sublen, $start = 0, $code = ‘UTF-8’)
{
    if($code == ‘UTF-8’)
    {
        $pa =
“/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/”;
        preg_match_all($pa, $string, $t_string);
 
        if(count($t_string[0]) – $start > $sublen) return join(”,
array_slice($t_string[0], $start, $sublen)).”…”;
        return join(”, array_slice($t_string[0], $start,
$sublen));
    }
    else
    {
        $start = $start*2;
        $sublen = $sublen*2;
        $strlen = strlen($string);
        $tmpstr = ”;
 
        for($i=0; $i<$strlen; $i++)
        {
            if($i>=$start && $i<($start+$sublen))
            {
                if(ord(substr($string, $i, 1))>129)
                {
                    $tmpstr.= substr($string, $i, 2);
                }
                else
                {
                    $tmpstr.= substr($string, $i, 1);
                }
            }
            if(ord(substr($string, $i, 1))>129) $i++;
        }
        if(strlen($tmpstr)<$strlen ) $tmpstr.= “…”;
        return $tmpstr;
    }
}
 
$str = “abcd供给截取的字符串”;
echo cut_str($str, 8, 0, ‘gb2312’);
?>

注意明:

 代码如下

function utf8Substr($str, $from, $len)
{
    return
preg_replace(‘#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,’.$from.’}’.
                      
‘((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,’.$len.’}).*#s’,
                       ‘$1’,$str);
}

可独自截取uft8字符串哦。

程序表达:

  1. 金沙国际唯一官网网址 ,len 参数以中文字符为规范,1len优质2个塞尔维亚共和国语字符,为了格局上窘迫些

  2. 要是将magic参数设为false,则汉语和塞尔维亚语视同一律,取绝对的字符数

  3. 特别适用于用htmlspecialchars(卡塔尔进行过编码的字符串

  4. 能准确管理GB231第22中学实体字符方式(氰)

程序代码:

 代码如下

function FSubstr($title,$start,$len=””,$magic=true)
{
/**
* powered by Smartpig
* mailto:d.einstein@263.net
*/

$length = 0;
if($len == “”) $len = strlen($title);

//判别初步为不正确地方
if($start > 0)
{
$cnum = 0;
for($i=0;$i<$start;$i++)
{
if(ord(substr($title,$i,1)) >= 128) $cnum ++;
}
if($cnum%2 != 0) $start–;

unset($cnum);
}

if(strlen($title)<=$len) return substr($title,$start,$len);

$alen = 0;
$blen = 0;

$realnum = 0;

for($i=$start;$i<strlen($title);$i++)
{
$ctype = 0;
www.2979.com ,$cstep = 0;
$cur = substr($title,$i,1);
if($cur == “&”)
{
if(substr($title,$i,4) == “<“)
{
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,4) == “>”)
{
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,5) == “&”)
{
$cstep = 5;
$length += 5;
$i += 4;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,6) == “””)
{
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,6) == “‘”)
{
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(preg_match(“/&#(d+);/i”,substr($title,$i,8),$match))
{
$cstep = strlen($match[0]);
$length += strlen($match[0]);
$i += strlen($match[0])-1;
$realnum ++;
if($magic)
{
$blen ++;
$ctype = 1;
}
}
}else{
if(ord($cur)>=128)
{
$cstep = 2;
截取粤语字符串,1.len参数以汉语字符为规范。$length += 2;
$i += 1;
$realnum ++;
if($magic)
{
$blen ++;
$ctype = 1;
}
}else{
$cstep = 1;
$length +=1;
$realnum ++;
if($magic)
{
$alen++;
}
}
}

if($magic)
{
if(($blen*2+$alen) == ($len*2)) break;
if(($blen*2+$alen) == ($len*2+1))
{
if($ctype == 1)
{
$length -= $cstep;
break;
}else{
break;
}
}
}else{
if($realnum == $len) break;
}
}

unset($cur);
unset($alen);
unset($blen);
unset($realnum);
unset($ctype);
unset($cstep);

return substr($title,$start,$length);
}


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图