PHP截取中文字符串函数总结

常用的php函数

strstr(string,string)            //从前面第一次出现某个字符串的地方截取到最后
strrchr(string,string)         //从某个字符串从最后出现的位置截取到结尾
strpos(string,string[,int])  //某个字符串第一次出现的位置
strrpos(string,string)      //某个字符串最后一次出现的位置
substr(string,int[,int])    //从指定位置开始截取字符串,可以指定截取的长度。
strlen(string)               //获取字符串的长度PHP截取开始和结束标记间的字符

方法一:利用explode对字符串进行分

 代码如下 复制代码

/**
* Get the content between $start and $end
*
* @param string $content 原始字符
* @param string $start     起始字符
* @param string $end      结束字符
* @return string
*/
function GetStringBetween($content,$start,$end){
    $r = explode($start, $content);
    if (isset($r[1])){
        $r = explode($end, $r[1]);
        return $r[0];
    }
    return '';
}

方法二:利用substr截取字符,由于php组件函数,因此字符串处理效率比explode方法要高一些

 代码如下 复制代码

/**
* Get the content between $start and $end
*
* @param string $content 原始字符
* @param string $start     起始字符
* @param string $end      结束字符
* @return string
*/
function get_string_between($string, $start, $end){
    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
}

 

PHP截取所有符合起始与结束标记的字符串

 代码如下 复制代码

/**
* Get all every strings between two tags
*
* @param string $string 原始字符串
* @param string $start  起始字符串
* @param string $end   结束字符串
* @return array
*/
function get_all_strings_between($string,$start,$end)
{
    //Returns an array of all values which are between two tags in a set of data
    $strings = array();
    $startPos = 0;
    $i = 0;
    //echo strlen($string)."n";
    while($startPos < strlen($string) && $matched = get_string_between(substr($string,$startPos),$start,$end))
    {
        if ($matched == null || $matched[1] == null || $matched[1] == '') break;
        $startPos = $matched[0]+$startPos+1;
        array_push($strings,$matched[1]);
        $i++;
    }
    return $strings;
}

function get_string_between($string, $start, $end){
    $ini = strpos($string,$start);
    if ($ini == 0) return null;
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return array($ini+$len,substr($string,$ini,$len));
}

php截取起始与结束标记间字符,带截取次数、是否允许重复选项

 代码如下 复制代码

 

/**
* Get all every strings between two tags
*
* @param string $string 原始字符串
* @param string $start  起始字符串
* @param string $end   结束字符串
* @return array
*/
function get_all_strings_between($string,$start,$end)
{
    //Returns an array of all values which are between two tags in a set of data
    $strings = array();
    $startPos = 0;
    $i = 0;
    //echo strlen($string)."n";
    while($startPos < strlen($string) && $matched = get_string_between(substr($string,$startPos),$start,$end))
    {
        if ($matched == null || $matched[1] == null || $matched[1] == '') break;
        $startPos = $matched[0]+$startPos+1;
        array_push($strings,$matched[1]);
        $i++;
    }
    return $strings;
}

function get_string_between($string, $start, $end){
    $ini = strpos($string,$start);
    if ($ini == 0) return null;
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return array($ini+$len,substr($string,$ini,$len));
}

截取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;
}
?>

截取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);
}
?>

时间: 2024-09-20 09:02:13

PHP截取中文字符串函数总结的相关文章

php截取中文字符串函数实例

 这篇文章主要介绍了php截取中文字符串函数,实例分析了php针对中文字符串操作的技巧,注意utf-8与gb2312编码的转换问题,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php截取中文字符串函数.分享给大家供大家参考.具体实现方法如下:   代码如下: <?php //中文字符串截取 function substr_zh($string,$sublen,$start=0,$code='UTF-8'){ if($code=='UTF-8'){ $pa = "/[x

php截取中文字符串函数实例_php技巧

本文实例讲述了php截取中文字符串函数.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <?php //中文字符串截取 function substr_zh($string,$sublen,$start=0,$code='UTF-8'){  if($code=='UTF-8'){   $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x8

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

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

thinkphp中的截取中文字符串函数msubstr()用法

看了很多教程说的是thinkphp可以在模板中直接使用msubstr方法来截取中文字符串,可是零度使用过程中却发现根本无法使用,百度一下知道,原来是因为think文件夹里没有放这个函数,现在贴出来,以便没有的网友直接拿过去用. 问题:使用ThinkPHP字符截取报错"Call to undefined function msubstr()" 解决方案: 把以下代码复制到ThinkPHP/Common/function.php文件中,我说的是3.23版本,其他版本复制到到公用函数文件里就

THINKPHP截取中文字符串函数

THINKPHP中已经准备好的字符串截取函数. ThinkPHP 官方扩展的 msubstr 方法其实挺好的,但有以下几个问题: 1,调用的时候会多次判断,包括2次判断是否自带了 mb_substr 和 iconv_substr 函数: 2,无论是否超出长度,如果有 $suffix=true 都会追加省略号,这个不太合理: 介于以上两点,并且在确保自己的服务器支持 mb_substr 函数.并且都是 utf-8 编码的情况下,我们其实可以自己在 Common/common.php(3.2 版本中

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

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

php substr()函数截取中文字符串乱码

php截取中文字符串出现乱码,这是最近发现的事情,先前我曾经写过一篇关于自动生成meta信息的文章 ,那篇关于利用php截取文章前多少字作为description方法,但是出现了IE6无法加载CSS的现象,这里 做一个补充.   首先要明确这么一个问题,之所以会出现IE6偶尔无法加载CSS的现象,是因为文件出现了乱码,导致后 面的加载CSS的link无法被IE6正确解析.因此就看到了一个纯HTML页面,没有CSS,赤裸裸! 明确了问题,剩下的问题就好解决了,就是防止乱码,既然万戈所提供的函数出现

PHP截取中文字符串方法总结

  程序一:PHP截取中文字符串方法 由于网站首页以及vTigerCRM里经常在截取中文字符串时出现乱码(使用substr),今天找到一个比较好的截取中文字符串方法,在此与大家共享. function msubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for($i = 0; $i < $strlen; $i++) { if(ord(substr($str, $i, 1)) > 0xa0)

php中截取中文字符串的代码小结_php技巧

字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到.虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了. 1. 截取GB2312中文字符串 复制代码 代码如下: < ?php //截取中文字符串 function mysubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for($i = 0; $i < $strlen; $i