PHP 中英文混合排版中处理字符串常用的函数

前端之家收集整理的这篇文章主要介绍了PHP 中英文混合排版中处理字符串常用的函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

判断某个位置是中文字符的左还是右半部分,或不是中文
#返回值-1左0不是中文字符1右
#用法
/
$a='thisis中文';
printis_chinese($a,1);//0
printis_chinese($a,8);//-1
printis_chinese($a,9);//1
/
functionis_chinese(&$str,$location){
$ch=true;
$i=$location;
while(ord($str[$i])>0xa0&&$i>=0){
$ch=!$ch;
$i--;
} if($i!=$location){
$f_str=$ch?1:-1;
}
else{
$f_str=false;
} return$f_str;
}
#中文字符串倒置函数
#如果一个将一个有中文的字符串用strrev倒过来,就会产生乱码
/
printcstrrev('thisis中文');//文中sisiht
/ functioncstrrev(&$str){
$long=strlen($str);
for($f_str='',$chinese=false,$i=$long-1;$i>=0;$i--){
if(ord($str[$i])>0xa0){
$chinese=!$chinese;
if($chinese==false){
$f_str.=$str[$i].$str[$i+1];
}
}
else{
$f_str.=$str[$i];
}
}
return$f_str;
}
/中文字符串截取函数
一些中文字符串截取函数经常有一些问题,例如在一些自动换行程序中
$a=“1中2”;
经两次截取后,
csubstr($str,$a,2);
csubstr($str,2,2)
由于载取位置指向“中”的右字节,可能会是这样的结果
1,2
用本函数会产生正确的结果
1中,2
/
#start开始位置,从0开始
#long=0则从start一直取到字符串尾
#ltor=true时从左到右取字符,false时到右到左取字符
#$cn_len中文字符按字节取还是字数取,如果按字数取,则一个中文当一个字节计算 functioncsubstr(&$str,$start=0,$long=0,$ltor=true,$cn_len=2){
if($long==0)$long=strlen($str);
if($ltor==false)$str=cstrrev($str); if($cn_len==1){ for($i=0,$fs=0;$i<$start;$fs++)
$i+=(ord($str[$fs])<=0xa0)?1:0.5;
for($i=0,$fe=$fs;$i<$long;$fe++)
$i+=(ord($str[$fe])<=0xa0)?1:0.5;
$long=$fe-$fs; }
else{ $fs=(is_chinese($str,$start)==1)?$start-1:$start;
$fe=$long+$start-1;
$end=(is_chinese($str,$fe)==-1)?$fe-1:$fe;
$long=$end-$fs+1;
} $f_str=substr($str,$fs,$long);
if($ltor==false)$f_str=cstrrev($f_str); return$f_str;
} #取左字符串
#当cn_len==2时$long取左边多少个字,反之则取左边多少个字节
functioncleft(&$str,$long,$cn_len=2){
$f_str=csubstr($str,true,$cn_len);
return$f_str;
} #取右字符串
functioncright(&$str,$cn_len=2){
$f_str=cstrrev($str);
$f_str=csubstr($f_str,$cn_len);
$f_str=cstrrev($f_str);
return$f_str;
}
#对含有中文字符的文章分行格式化
#再也不会发生因换行问题而产生的种种问题啦!!!
#注:文章的每一行必须用n(chr(13))进行分行
#$width每行多少字符
#$br将每行用什么字符当结束符 functionctext_wrap(&$text,$width=60,$br="
"){
$lines=explode("n",$text);
$rows=count($lines); for($i=0;$i<$rows;$i++){
$len=strlen($lines[$i]);
for($j=0;$j<$len;$j+=$width){
$p=$j+$width-1;
$k=0;
if($p<$len){
while(!is_chinese($lines[$i],$p)&&$lines[$i][$p]!=''&&$p>$j){
$k++;
$p--;
}
if($p==$j)$k=0;
}
$f_str.=csubstr($lines[$i],$j,$width-$k).$br;
$j-=$k;
}
}
return$f_str;
}

原文链接:https://www.f2er.com/php/29914.html

猜你在找的PHP相关文章