自定义一个函数截取中文字符串

/**
* 截取中文字符串
* @param unknown $str 要截取的字符串
* @param unknown $encode 字符编码
* @param unknown $start 开始位置
* @param string $len 要截取的长度
* @return string
*/
function getStr($str,$encode,$start,$len=null)
{
  switch ($encode)
  {
    case ‘utf8‘:$num = 3;break;
    case ‘gbk‘:$num = 2;break;
    case ‘gb2312‘:$num = 2;break;
    default:
      echo ‘编码格式出错‘;exit;
  }
  $m=0;//开始截取位置
  for($a=0;$a<$start;$a++)
  {
    if(ord(substr($str, $m,1))>0xa0)//0xa0中文开始的值
    {
      $m+=$num;
    }else
    {
      $m++;
    }
  }
  $length = strlen($str);
  $n=1;//截取次数(截取多长,就截取几次)
  for ($i=$m;$i<$length;)
  {
    if(ord(substr($str, $i,1))>0xa0)
    {
      $sstr .= substr($str, $i ,$num);
      $i+=$num;
    }
    else
    {
      $sstr .= substr($str, $i ,1);
      $i++;
    }
    $n++;
    if ($len!==null){
      if($n>$len)break;//如果超出长度,跳出循环
    }
  }
  return $sstr;
}

时间: 2024-08-09 19:33:55

自定义一个函数截取中文字符串的相关文章

php截取中文字符串,英文字符串,中英文字符串长度的方法

今天学习了php函数截取中文字符串,英文字符串,中英文字符串的函数使用方法.对中英文截取方法不理解,此处先做记录. PHP自带的函数如strlen().mb_strlen()都是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节.例: $enStr = ‘Hello,China!’;echo strlen($enStr); // 输出:12 而中文则不然,做中文网站一般会选择两种编码:gbk/gb2312或是utf-8.utf-8能兼容更多的字符,所以受到很多站长的喜爱.gbk与u

php中计算中文字符串长度、截取中文字符串

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

thinkphp模板中截取中文字符串的方法分享

前段用thinkphp写了一个系统,感觉thinkphp学起来比较容易,开发起来了比较顺手,其中一个关键的因素就是它的模版引擎相当强大,使用方法跟smarty类似,在模版中还可以用php代码,有模版包含.继承的等很多好的功能…… 但是我发现thinkphp在模版函数中,没有中文字符串的截取函数,有个substr可以截取,但是不是基于中文的,当使用utf8编码的时候,由于3个字符代表一个中文,如果想截取的内容混杂中文/数字/英文字符串的时候就会出问题,最后一个字符很有可能混乱,这个问题很头大.于是

PHP截取中文字符串不出现?号的解决方法[原创]

PHP截取中文字符串不出现?号的解决方法[原创] 大 | 中 | 小 [不指定 2007-8-15 18:51 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2007.08.15 转载请注明出处:http://blog.zyan.cc] 当PHP截取中英文混合字符串时,最后一个汉字经常被拆成两半,例:截取字符串的前18个字 view plainprint? <?php $text = "1欢迎访问sina新浪播客"; $value = substr($tex

前端自定义format函数,做字符串格式化功能

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义format函数,做字符串格式化功能</title> </head> <body> <script> String.prototype.format = function (kwargs) { //自定义定义form

【C语言】写一个函数,实现字符串内单词逆序

//写一个函数,实现字符串内单词逆序 //比如student a am i.逆序后i am a student. #include <stdio.h> #include <string.h> #include <assert.h> void reverse_string(char *left, char *right) //连续的字符串逆序 { char temp; while (right > left) { temp = *left; *left = *rig

请实现一个函数,把字符串中的每个空格替换成“%20”

请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"we are happy.",则输出"we%20are%20happy." #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char arr[] = "we are happy"; int i = 0; int j = 0; int len

写一个函数找到给定字符串的位置

题目 给你一个排好序的并且穿插有空字符串的字符串数组,写一个函数找到给定字符串的位置. 例子:在字符串数组 [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”,“”, “dad”, “”, “”] 中找到”ball”,返回下标4. 例子:在字符串数组 [“at”, “”, “”, “”, “”, “ball”, “car”, “”, “”, “dad”, “”, “”] 中找到”ballcar”,查找失败,返回-1. 解答 字符串数组已经是有序的了,所以,还

【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”

//字符串替换空格:实现一个函数,把字符串里的空格替换成"%20" #include <stdio.h> #include <assert.h> void replace(char *src) { assert(src); int OldLen = 0; //原字符串长度 int NewLen = 0; //新字符串长度 int BlackNum = 0; //空格数量 int NewBack = 0; //新字符串尾部 int OldBack = 0; //原