[快速入口区]  没泪水的泪眼 | 落泪的百合  |  风过留痕 | 风枫轩 |  美文欣赏  |  红袖文学  |  潇湘琴韵文集收藏   |   九九文章网   |  网站优化  |  PHP 学习区  | 需求分析 欢迎大家来聚!

曾经沧海难为水 除却巫山不是云

    朋友就是无形中伴你走过风雨,永远支持你的力量 朋友就是一种无法言喻的美好感觉 朋友就是在别人面 前永远护著你的那个人 朋友就是即使是一点小感动,一点小事情都想一起分享 朋友就是当你抱头痛哭的时候,扶著你肩膀的那个人 朋友就是当你面对人生挫折时,一直紧握你的那双手 喜欢下雨,因为你不会知道我流泪…… 你能够看到他是你与他的缘份 你能够和你身边的人做朋友也是你与他的缘份 纵使你不知道这颗流星会何时消失 但如若你好好珍惜看到这流星的每一刻 那就算流星走了你也不会后悔 请大家好好珍惜身边的每一个人 珍惜这段友谊!

广告位招租:[ 中国图书网   |  京东商城  | 健康平安网  | C I 2.1手册 ]

导航

php 汉字判断

判断有没有汉字:
 
preg_match("/[\x{4e00}-\x{9fa5}]/u", $string)

\x4e00-\x9fa5是汉字unicode的十六进制范围

http://www.shuihan.com/article/146
 
打开这个隐藏部分
/***************************************************************************
函数功能:截取GB2312以及GBK编码的字符串,可以设置截取位置和长度,2个长度代表一个汉字
$str------------截取源字符串
$start----------起始位置,不能为空,从1算起
$len------------截取长度(2代表一个汉字),如果为空则截取到字符串末尾
主意:该函数不能用于utf8编码字符串,会出现乱码
**************************************************************************
*/
function substr_for_gb2312($str,$start,$len=null)
{
$totlelength = strlen($str);

//特例情况
if ($len == null) $len = $totlelength;
if ($len ==0) return "";
if ($len >= $totlelength && $start == 0 ) return $str;
if ($start > $totlelength) return "";

//分析$start
if ($start < 0 ) //$start<0时,转化为$start>0时的定位.
{
if ( abs($start) >= $totlelength )
$start = 0;
else
$start = $totlelength - abs($start);
}

//确定起始位置,当起始位拆分某汉字时,返回值包含此汉字.
if ($start > 0)
{
$i = $start-1;
$flag = -1;
while ($i >= 0)
{
if ( ord(substr($str,$i,1)) > 160)
{
$flag = -1*$flag;
}
else break;
$i--;
}
if($flag==1)
{
$start = $start - 1;
$len++; //保证不位移.
}
}

$str = substr($str,$start);//截除字符串$str的$start位前的字符
$totlelength = strlen($str);

//确定结束位置,当结束位拆分某汉字时,返回值不包含此汉字.
if ($len<0) $len = $totlelength - abs($len);
if ($len <= 0) return "";
$i=min($len,$totlelength);
$i--;
$flag = -1;
while ($i >= 0)
{
if (ord(substr($str,$i,1))>160)
{
$flag=-1*$flag;
}
else break;
$i--;
}

if($flag == 1) $len=$len-1;
$subit=substr($str,0,$len);

return $subit;
}

/***************************************************************************
函数功能:截取GB2312以及GBK编码的字符串,从第一个字符开始截取,2个长度代表一个汉字
$str------------截取源字符串
$len------------截取长度(2代表一个汉字)
主意:该函数不能用于utf8编码字符串,会出现乱码
**************************************************************************
*/
function splitStr($str,$len)
{
if($len<=0)
{
return false;
}
else
{
$sLen=strlen($str);
if($len>=$sLen)
return $str;
else
{
for($i=0;$i<($len-1);$i++)
{
if(ord(substr($str,$i,1))>0xa0)
$i++;
}

if($i>=$len)
return substr($str,0,$len);
elseif(ord(substr($str,$i,1))>0xa0)
return substr($str,0,$len-1);
else
return substr($str,0,$len);
}
}
}


/***************************************************************************
函数功能:截取utf8或GB2312或者GBK编码的字符串,从第一个字符开始截取,1个长度代表一个汉字
$sourcestr------------截取源字符串
$cutlength------------截取长度(字数)
这个函数很万能,但是相对前两个耗资源一些
**************************************************************************
*/
function substr_for_utf8($sourcestr,$cutlength)
{
$returnstr='';
$i=0;
$n=0;
$str_length=strlen($sourcestr); //字符串的字节数
while (($n<$cutlength) and ($i<=$str_length))
{
$temp_str=substr($sourcestr,$i,1);
$ascnum=Ord($temp_str); //得到字符串中第$i位字符的ascii码
if ($ascnum>=224) //如果ASCII位高与224,
{
$returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符
$i=$i+3; //实际Byte计为3
$n++; //字串长度计1
}
elseif ($ascnum>=192)//如果ASCII位高与192,
{
$returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
$i=$i+2; //实际Byte计为2
$n++; //字串长度计1
}
elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //实际的Byte数仍计1个
$n++; //但考虑整体美观,大写字母计成一个高位字符
}
else //其他情况下,包括小写字母和半角标点符号,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //实际的Byte数计1个
$n=$n+0.5; //小写字母和半角标点等与半个高位字符宽...
}
}

if ($str_length>$cutlength)
{
$returnstr = $returnstr . "..."; //超过长度时在尾处加上省略号
}

return $returnstr;
}


?>

posted on 2012-03-05 16:18  曾经沧海 云淡风轻  阅读(225)  评论(0编辑  收藏  举报