PHP 中英文混合排版中处理字符串常用的函数_php教程-查字典教程网
PHP 中英文混合排版中处理字符串常用的函数
PHP 中英文混合排版中处理字符串常用的函数
发布时间:2016-12-29 来源:查字典编辑
摘要:#判断某个位置是中文字符的左还是右半部分,或不是中文#返回值-1左0不是中文字符1右#用法/*$a='thisis中文';printis_c...

#判断某个位置是中文字符的左还是右半部分,或不是中文

#返回值-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,0,2);

csubstr($str,$a,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,0,$long,true,$cn_len);

return$f_str;

}

#取右字符串

functioncright(&$str,$long,$cn_len=2){

$f_str=cstrrev($str);

$f_str=csubstr($f_str,0,$long,true,$cn_len);

$f_str=cstrrev($f_str);

return$f_str;

}

#对含有中文字符的文章分行格式化

#再也不会发生因换行问题而产生的种种问题啦!!!

#注:文章的每一行必须用n(chr(13))进行分行

#$width每行多少字符

#$br将每行用什么字符当结束符

functionctext_wrap(&$text,$width=60,$br="<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;

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新php教程学习
    热门php教程学习
    编程开发子分类