PHP头条
热点:

PHP 字符串,php字符串


1. mb_strimwidth字符串截取函数使用 & UTF8编码认识

<?php  
header("Content-type:text/html;charset=utf-8");  

echo mb_strwidth("6", "UTF-8") . '<br />';//1  
echo mb_strwidth("A", "UTF-8") . '<br />';//1  
echo mb_strwidth("a", "UTF-8") . '<br />';//1  
echo mb_strwidth("月", "UTF-8") . '<br />';//2  

echo mb_strwidth("6月9日OUR系统升级通知", "UTF-8") . '<br />';//21  

echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '...') .'<br />';//6月9��...  
echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '...', "UTF-8") .'<br />';//6月9日O...  
echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '......', "UTF-8") .'<br />';//6月9......  
echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '', "UTF-8") .'<br />';//6月9日OUR  

?>  

附手册介绍:

mb_strimwidth
(PHP 4 >= 4.0.6, PHP 5)

mb_strimwidth — Get truncated string with specified width

Description
string mb_strimwidth ( stringstr,intstart , intwidth[,stringtrimmarker [, string$encoding ]] )
Truncates stringstr to specified width.

本次经验:

2.$trimmarker参数会影响结果 ,其长度也被计入结果中

3.此函数按等宽字体计算字符串占用宽度。汉字占两个宽度,其余占一个宽度。

4.传入编码参数是好的

2.

mb_substr($string,'GBK'),
mb_strlen($string,'GBK'),
mb_strwidth($string,'GBK') 
适用于GBK

2.

mb_substr($string,'GBK'),mb_strlen($string,'GBK'),mb_strwidth($string,'GBK')适用于GBK
$ test = "123中文测试";

字符数
$ mb_strlen($ test,'GBK');7
$ mb_strlen($ test,‘UTF-8');7

$ mb_strlen($ test);11



字节数
$ mb_strwidth($ test, 'GBK');11
$ mb_strwidth($ test, 'UTF-8');4
$ mb_strwidth($ test);11

mb_substr($ test,0,4);乱码
mb_substr($ test,0,5);123中



字符数

mb_substr($ test,0,4,'GBK');123中
mb_substr($ test,0,5,'GBK');123中文

mb_substr($ test,0,4,'gb2312');123中
mb_substr($ test,0,4,'UTF-8');乱码

截取中文英文字符串:
方法1:

function str_cut($ str, $ len)
{
  $ str = iconv($ str,‘GBK','GBK/TRANLIT');
  if(mb_strwidth($ str)<$ len)
  {
    return $ str;
  }
  for($ i=0;$ i<mb_strlen($ str);$ i++)
  {
    $ tmp=mb_substr($ str,$ i,1,'GBK');
    if(mb_strwidth($ return.$ tmp)>$ len)
    {
      break;
    }
    $ return.=$ tmp;
  }
  return $ return;
}



方法2:

function str_cut($ str, $ len)
{
  $ str = iconv($ str,‘GBK','GBK/TRANLIT');
  if(mb_strwidth($ str)<$ len)
  {
    return $ str;
  }
  for($ i=0;$ i<mb_strlen($ str);$ i++)
  {
    $ return = mb_substr($ str,0,$i,'GBK');
    if(mb_strwidth($ return)>$ len)
    {

      $ return = mb_substr($ str,0,$i-1,'GBK');
      break;
    }
  }
  return $ return;
}

判断中文和编码有关 gbk是双字节,utf8是三字节,可以根据 中文的范围来判断

编码范围1. GBK (GB2312/GB18030)
x00-xff GBK双字节编码范围
x20-x7f ASCII
xa1-xff 中文
x80-xff 中文
2. UTF-8 (Unicode)
u4e00-u9fa5 (中文)
x3130-x318F (韩文
xAC00-xD7A3 (韩文)
u0800-u4e00 (日文)
ps: 韩文是大于[u9fa5]的字符

二、代码例子

//截取字符串字串-GBK (PHP)
function gb_substr($str, $len){
$count = 0;
for($i=0; $i<strlen($str); $i++){
if($count == $len) break;
if(preg_match("/[x80-xff]/", substr($str, $i, 1))) ++$i;
++$count;        
}
return substr($str, 0, $i);
}

function substrGb($str, $len){
    $ret = '';
    $i = 0;
    while ($i < $len) {
        $ch = substr($str, $i, 1);
        if (ord($ch) > 0x80) {
            $i++;
        }
        $i++;
    }
    $ret = substr($str, 0, $i);
    return $ret;
}
//截取字符串-UTF8(PHP)
function utf8_substr($str,$position,$length){
$start_position = strlen($str);
$start_byte = 0;
$end_position = strlen($str);
$count = 0;
for($i = 0; $i < strlen($str); $i++){
if($count >= $position && $start_position > $i){
$start_position = $i;
$start_byte = $count;
}
if(($count-$start_byte)>=$length) {
$end_position = $i;
break;
}    
$value = ord($str[$i]);
if($value > 127){
$count++;
if($value >= 192 && $value <= 223) $i++;
elseif($value >= 224 && $value <= 239) $i = $i + 2;
elseif($value >= 240 && $value <= 247) $i = $i + 3;
else die('Not a UTF-8 compatible string');
}
$count++;
}
return(substr($str,$start_position,$end_position-$start_position));
}

int ord ( string string )------返回字符的ASCII码
string chr ( int ascii )-----根据字符的ASCII码返回相应的字符

www.phpzy.comtrue/php/4476.htmlTechArticlePHP 字符串,php字符串 1. mb_strimwidth字符串截取函数使用 UTF8编码认识 ?php header( "Content-type:text/html;charset=utf-8" ); echo mb_strwidth( "6" , "UTF-8" ) . 'br /' ; //1 echo mb_strwidth( "A" , "UTF-8" ) . 'br /' ; /...

相关文章

    暂无相关文章
相关频道:

PHP之友评论

今天推荐