PHP中文字符串截取程序代码

1. 截取GB2312中文字符串

 代码如下 复制代码

<?php

//截取中文字符串

function mysubstr($str, $start, $len) {

$tmpstr = “”; $strlen = $start + $len;
for($i = 0; $i < $strlen; $i++) {

if(ord(substr($str, $i, 1)) > 0xa0) {

$tmpstr .= substr($str, $i, 2); $i++;

}

else $tmpstr .= substr($str, $i, 1);

}

return $tmpstr;

}

?>

2. 截取utf8编码的多字节字符串

 代码如下 复制代码

<?php

//截取utf8字符串
function utf8Substr($str, $from, $len)

{

return preg_replace(‘#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,’.$from.’}’.
‘((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,’.$len.’}).*#s’, ‘$1′,$str);
}

?>

但是在英文和汉字混合的情况下会出现如下问题:

如果有这样一个字符串

 代码如下 复制代码
$str="这是一个字符串";

为了截取该串的前10个字符,使用

 代码如下 复制代码
if(strlen($str)>10) $str=substr($str,10)."…";

那么,echo $str的输出应该是"这是一个字…"

那么要如何解决这个问题了,下面我来分享一个可以支持gb2312,gbk,big三种编码。

例1

 

 代码如下 复制代码
$len = 19;
$text = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
echo strlen($text)<=$len ? $text : (substr($text,0,$len).chr(0)."....");
/****chr(0)不是null
null是什么都没有,而chr(0)的值是0。表示成16进制是0x00,表示成二进制是00000000
虽然chr(0)不会显示出什么,但是他是一个字符。
当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,这就是出现乱码的原因。而值为0x81到0xff与0x00组合始终都显示为“空”
根据这一特点,在substr的结果后面补上一个chr(0),就可以防止出现乱码了
注:
编码 第一字节 第二字节
gb2312 0xa1-0xf7 0xa1-0xfe
gbk 0x81-0xfe 0x81-0xfe 0x40-0x7e
big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e
其次这个是网上搜索的,支持utf-8编码,原作者不详:
 *****/
     function subString_UTF8($str, $start, $lenth)
    {
        $len = strlen($str);
        $r = array();
        $n = 0;
        $m = 0;
        for($i = 0; $i < $len; $i++) {
            $x = substr($str, $i, 1);
            $a  = base_convert(ord($x), 10, 2);
            $a = substr('00000000'.$a, -8);
            if ($n < $start){
                if (substr($a, 0, 1) == 0) {
                }elseif (substr($a, 0, 3) == 110) {
                    $i += 1;
                }elseif (substr($a, 0, 4) == 1110) {
                    $i += 2;
                }
                $n++;
            }else{
                if (substr($a, 0, 1) == 0) {
                    $r[ ] = substr($str, $i, 1);
                }elseif (substr($a, 0, 3) == 110) {
                    $r[ ] = substr($str, $i, 2);
                    $i += 1;
                }elseif (substr($a, 0, 4) == 1110) {
                    $r[ ] = substr($str, $i, 3);
                    $i += 2;
                }else{
                    $r[ ] = '';
                }
                if (++$m >= $lenth){
                    break;
                }
            }
        }
        return $r;
    } // End subString_UTF8;
}// End String

#由于此函数返回的是一个数组,因此要配合join函数来显示字符串:
#join('',subString_UTF8($str, $start, $lenth));
#在页面显示的时候还可以在此语句后面连一个"..."

时间: 2024-09-14 22:50:30

PHP中文字符串截取程序代码的相关文章

php 中文字符串截取函数

<? //php教程 中文字符串截取函数 /* */  代码如下 复制代码 function substr($str = '', $offset = 0, $len = 0){     $len || ($len = strlen($str));     preg_match_all('/./us', $str, $result);     return implode('', array_slice($result[0], $offset, $len)); } //方法二  代码如下 复制代码

THINKPHP截取中文字符串函数实例代码

在项目开发中,我们常常会遇到英文.中文等字符串截取问题,比如说新闻列表页面需要新闻内容简介,这就要用到字符串截取了. 下面就为大家分享一个THINKPHP中已经准备好的字符串截取函数. # 函数解释: msubstr($str, $start=0, $length, $charset="utf-8″, $suffix=true) /* $str:要截取的字符串 $start=0:开始位置,默认从0开始 $length:截取长度 $charset="utf-8″:字符编码,默认UTF-8

PHP 中文字符串截取无乱码的方法以及php汉字截取函数

昨天,在写代码时我遇到了一个中文字符串截取的问题,原本是想直接用substr()来,但这个是在单字节符下用的,对于多字节编码的汉字或是其它语言字符中,这个函数可能就用不上了,而且会容易截出乱码来!       现在就把我的下工作记录和总结给大家分享一下: 问题产生及使用案例网站:天气预报15天查询(http://tqybw.net) 问题时间:2013-10-31       解决思路:把汉字按一个汉字在编码下按其在完整性正则分割成数组,再根据需要取截取长度:       1.实现方法函数  

php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例_php技巧

本文实例讲述了php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8用法.分享给大家供大家参考,具体如下: /* *gb2312中文字符串截取 */ function substr_for_gb2312($str,$start,$len=null) { $totlelength = strlen($str); //特例情况 if ($len == null) $len = $totlelength; if ($len ==0) return ""

php中支持多种编码的中文字符串截取函数!_php技巧

支持多种编码的中文字符串截取函数!   复制代码 代码如下: /*     * @todo 中文截取,支持gb2312,gbk,utf-8,big5      *     * @param string $str 要截取的字串     * @param int $start 截取起始位置     * @param int $length 截取长度     * @param string $charset utf-8|gb2312|gbk|big5 编码      * @param $suffix

多个PHP中文字符串截取函数_php实例

复制代码 代码如下: <?phpfunction sysSubStr($string,$length,$append = false) {     if(strlen($string) <= $length )     {         return $string;     }     else     {         $i = 0;         while ($i < $length)         {             $stringTMP = substr($s

php中文字符串截取方法实例总结_php技巧

本文实例总结了php中文字符串截取方法,非常实用的技巧.分享给大家供大家参考.具体方法分析如下: 用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符"锯"成两半. 解决办法如下: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. 2.自己书写截取函数,但效率不如用mbstring扩展库来得高. 3.如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0). substr()函数

mssql sql 字符串截取实例代码

mssql sql 字符串截取实例代码 关于字符串截取我们用substring函数 substring   (   expression   ,   start   ,   length   )   返回字符.binary.text   或   image   表达式的一部分. 参数 expression 是字符串.二进制字符串.text.image.列或包含列的表达式.不要使用包含聚合函数的表达式. start 是一个整数,指定子串的开始位置. length 是一个整数,指定子串的长度(要返回

php中计算中文字符串长度、截取中文字符串的函数代码_php技巧

在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启.当然,如果是用的自己的服务器,则只要在php.ini中开启即可.如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了. 以下几个函数用起来颇为顺手的.不过要知道,得在utf-8环境下使用. 复制代码 代码如下: header('Content-type:text/html;cha