手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP 中英文混合排版中处理字符串常用的函数
PHP 中英文混合排版中处理字符串常用的函数
摘要:#判断某个位置是中文字符的左还是右半部分,或不是中文#返回值-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 ASCII码与字符串的相互转换

PHP中的事务使用实例

PHP 判断数组是否为空的5大方法

如何使用PHP中的字符串函数

php一个解析字符串排列数组的方法

PHP中4种常用的抓取网络数据方法

php解析字符串里所有URL地址的方法

PHP与已存在的Java应用程序集成

PHP SPL标准库中的常用函数介绍

PHP获取数组的键与值方法小结

精品推荐
分类导航