时时商务社区

标题: PHP 中英文混合排版中处理字符串常用的函数 [打印本页]

作者: 网络通达    时间: 2018-2-14 09:24

            # 判断某个位置是中文字符的左还是右半部分,或不是中文  
# 返回值 -1 左 0 不是中文字符 1 右  
# 用法  
/*  
$a = 'this is 中文';  
print is_chinese($a, 1); // 0  
print is_chinese($a,8); // -1  
print is_chinese($a,9); // 1  
*/  
function is_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倒过来,就会产生乱码  
/*  
print cstrrev('this is 中文'); // 文中 si siht  
*/  
function cstrrev(&$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 中文字符按字节取还是字数取,如果按字数取,则一个中文当一个字节计算  
function csubstr(&$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$j) {  
$k ++;  
$p --;  
}  
if($p == $j) $k = 0;  
}  
$f_str .= csubstr($lines[$i], $j, $width-$k) . $br;  
$j -= $k;  
}  
}  
return $f_str;  
}  
            
            
您可能感兴趣的文章:
  • php strlen mb_strlen计算中英文混排字符串长度
  • php中计算中文字符串长度、截取中文字符串的函数代码
  • 使用php统计字符串中中英文字符的个数
  • PHP字符串长度计算 - strlen()函数使用介绍
  • PHP 字符串长度判断效率更高的方法
  • php截取字符串之截取utf8或gbk编码的中英文字符串示例
  • php轻松实现中英文混排字符串截取
  • PHP获取中英混合字符串长度的方法
  • 利用PHP函数计算中英文字符串长度的方法
  • PHP判断字符串长度的两种方法很实用
  • PHP指定截取字符串中的中英文或数字字符的实例分享
  • PHP针对中英文混合字符串长度判断及截取方法示例
            




    欢迎光临 时时商务社区 (http://bbs.4435.cn/) Powered by Discuz! X3.2