PHP中的字符串截取自定义函数
2008-02-15 18:19:02 来源:WEB开发网使用到的库函数
函数:Ord()
返回字符的序数值
语法: int ord(string string);
内容说明 :
本函数返回字符的 ASCII (美国国家标准交换码) 序数值。本函数和 chr() 函数相反。
提示:ASCII 码127以后是汉字,即 ">127" 为汉字
函数:substr()
语法: string substr(string string, int start, int [length]);
返回值: 字符串
内容说明:
本函数将字符串 string 的第 start 位起的字符串取出 length 个字符。若 start 为负数,则从字符串尾端算起。若可省略的参数 length 存在,但为负数,则表示取到倒数第 length 个字符。
strlen()
语法: int strlen(string str);
返回值: 整数
内容说明:
本函数返回指定的字符串长度。取得字符串长度。
----------------------------------------------------------------------
如果字符串比较短,比如主题title类的,可以使用循环判断汉字和英文字
<?
/*
------------------------------------------------------
参数:
$str_cut 需要截断的字符串
$length 允许字符串显示的最大长度
程序功能:截取全角和半角(汉字和英文)混合的字符串以避免乱码
------------------------------------------------------
*/
function substr_cut($str_cut,$length)
{
if (strlen($str_cut) > $length)
{
for($i=0; $i < $length; $i++)
if (ord($str_cut[$i]) > 128) $i++;
$str_cut = substr($str_cut,0,$i)."..";
}
return $str_cut;
}
?>
在php中使用传统的字符串截取函数substr处理含有中文字符的字符串时会出现汉字被切断的现象。当可以使用php扩展库时,我们可以用mb_substr代替。但是该扩展库在连接时有一定的困难——linux下需重新编译php,有时并不能可做到,更何况其冗余函数较多。
在网络上可以看到很多实现此功能的函数。但算法多是循环判断,当字符串较大时效率极低(比如上面的程序代码)。 为此这里介绍两个高效的函数:c_substr、m_substr。他们的用法完全与substr和mb_substr相同。不同之处在于:c_substr按字节计算,即一个汉字的长度为2;m_substr按字计算,即一个汉字的长度为1。可根据需要选用。
<?
function c_substr($str,$start=0)
{
$ch = chr(127);
$p = array("/[x81-xfe]([x81-xfe]|[x40-xfe])/","/[x01-x77]/");
$r = array("","");
if(func_num_args() > 2)
{
$end = func_get_arg(2);
}
else
{
$end = strlen($str);
}
赞助商链接