收集了php中截取字符串函数

 更新时间:2016年11月25日 16:24  点击:2090
本文章是收集了几个常用的字符串截取函数,这是解决了php中对各种编码的字符截取会乱码的问题,有需要的同学可以参考一一下。

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

}

?>

3. UTF-8、GB2312都支持的汉字截取函数 < ?php

/*

Utf-8、gb2312都支持的汉字截取函数

cut_str(字符串, 截取长度, 开始长度, 编码);

编码默认为 utf-8

开始长度默认为 0

*/

 代码如下 复制代码

function cut_str($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][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/";

preg_match_all($pa, $string, $t_string);

 

if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";

return join('', array_slice($t_string[0], $start, $sublen));

}

else

{

$start = $start*2;

$sublen = $sublen*2;

$strlen = strlen($string);

$tmpstr = '';

 

for($i=0; $i< $strlen; $i++)

{

if($i>=$start && $i< ($start+$sublen))

{

if(ord(substr($string, $i, 1))>129)

{

$tmpstr.= substr($string, $i, 2);

}

else

{

$tmpstr.= substr($string, $i, 1);

}

}

if(ord(substr($string, $i, 1))>129) $i++;

}

if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";

return $tmpstr;

}

}

 

$str = "abcd需要截取的字符串";

echo cut_str($str, 8, 0, 'gb2312');

?>

4. BugFree 的字符截取函数 < ?php

 代码如下 复制代码

/**

* @package BugFree

* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $

*

*

* Return part of a string(Enhance the function substr())

*

* @author Chunsheng Wang <wwccss@263.net>

* @param string $String the string to cut.

* @param int $Length the length of returned string.

* @param booble $Append whether append "...": false|true

* @return string the cutted string.

*/

function sysSubStr($String,$Length,$Append = false)

{

if (strlen($String) < = $Length )

{

return $String;

}

else

{

$I = 0;

while ($I < $Length)

{

$StringTMP = substr($String,$I,1);

if ( ord($StringTMP) >=224 )

{

$StringTMP = substr($String,$I,3);

$I = $I + 3;

}

elseif( ord($StringTMP) >=192 )

{

$StringTMP = substr($String,$I,2);

$I = $I + 2;

}

else

{

$I = $I + 1;

}

$StringLast[] = $StringTMP;

}

$StringLast = implode("",$StringLast);

if($Append)

{

$StringLast .= "...";

}

return $StringLast;

}

}

 

$String = "111cn.net-- 简单、精彩、通用";

$Length = "18";

$Append = false;

echo sysSubStr($String,$Length,$Append);

?>

最近在开发我的Wordpress插件ShareLink,在这过程中,发现了PclZip这个操作zip文件的PHP类,不得不推荐下。还有另外一个推荐的原因就是在它的源码里面让我发现了一个PHP函数参数的淫荡用法。下面将举例说明。

生成zip文件
用法一:

 

 代码如下 复制代码

< ?php

include_once('pclzip.lib.php');

$archive = new PclZip('archive.zip');

$v_list = $archive->create('file.txt,data/text.txt,folder');

if ($v_list == 0) {

die("Error : ".$archive->errorInfo(true));

}

?>


用法二:

 

 代码如下 复制代码

< ?php

include_once('pclzip.lib.php');

$archive = new PclZip('archive.zip');

$v_list = $archive->create('data/file.txt,data/text.txt',

PCLZIP_OPT_REMOVE_PATH, 'data',

PCLZIP_OPT_ADD_PATH, 'install');

if ($v_list == 0) {

die("Error : ".$archive->errorInfo(true));

}

?>


看见create方法的参数没有,再看看方法原型你就知道如何了。至少我还没有这样用过

文章有二个实例是用来检测上传文件类型与上传图片大小,我本来想分开写但是觉得两个放一起会更好些,有需要的同学看看。
 代码如下 复制代码

 

//-----------------------------------------------------------------------------------


// 函数名:CheckExtendName($C_filename,$A_extend)

// 作 用:上传文件的扩展名判断

// 参 数:$C_filename 上传的文件名

// $A_extend 要求的扩展名

// 返回值:布尔值

// 备 注:无

//-----------------------------------------------------------------------------------

 

 

function CheckExtendName($C_filename,$A_extend)

{

if(strlen(trim($C_filename)) < 5)

{

return 0; //返回0表示没上传图片

}

$lastdot = strrpos($C_filename, "."); //取出.最后出现的位置

$extended = substr($C_filename, $lastdot+1); //取出扩展名

 

 

for($i=0;$i{

if (trim(strtolower($extended)) == trim(strtolower($A_extend[$i]))) //转换大

小写并检测

{

$flag=1; //加成功标志

$i=count($A_extend); //检测到了便停止检测

}

}

 

 

if($flag<>1)

{

for($j=0;$j{

$alarm .= $A_extend[$j]." ";

}

AlertExit('只能上传'.$alarm.'文件!而你上传的是'.$extended.'类型的文件');

return -1; //返回-1表示上传图片的类型不符

}

 

 

return 1; //返回1表示图片的类型符合要求

}

 

 

 

//-----------------------------------------------------------------------------------

 

 

 

// 函数名:CheckImageSize($ImageFileName,$LimitSize)

// 作 用:检验上传图片的大小

// 参 数:$ImageFileName 上传的图片名

// $LimitSize 要求的尺寸

// 返回值:布尔值

// 备 注:无

//-----------------------------------------------------------------------------------

 

 

function CheckImageSize($ImageFileName,$LimitSize)

{

$size=GetImageSize($ImageFileName);

if ($size[0]>$LimitSize[0] ││ $size[1]>$LimitSize[1])

{

AlertExit('图片尺寸过大');

return false;

}

return true;

}

 

 

 

//-----------------------------------------------------------------------------------

 

 

 

// 函数名:Alert($C_alert,$I_goback=0)

// 作 用:非法操作警告

// 参 数:$C_alert(提示的错误信息)

// $I_goback(返回到那一页)

// 返回值:字符串

// 备 注:无

//-----------------------------------------------------------------------------------

 

 

function Alert($C_alert,$I_goback=0)

{

if($I_goback<>0)

{

echo " ";

}

else

{

echo " ";

}

}

?>

掌握PHP读写 Cookie的执行时间与效率问题,了解PHP读写Cookie对性能的影响,并在实际开发中合理的使用PHP读写Cookie,分析工具采用PEAR Benchmark_Iterate类,主要关注指标为PHP读写Cookie的程序执行时间。

目录

一,什么是PEAR与Benchmark类
二,为什么要分析PHP读写Cookie情况
三,性能测试代码
四,性能测试结果
五,性能测试总结
六,setcookie函数说明
七,附性能测试源代码下载
参考资料

一,什么是PEAR与Benchmark类

请参考PHP性能优化系列
第二期 PHP性能优化工具篇Benchmark类调试执行时间
第一期 PHP性能优化准备篇图解PEAR安装

二,为什么要分析PHP读写Cookie情况

1,什么是Cookie?
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。

2,PHP与Cookie
PHP通过内置函数setcookie()写cookie,通过$_COOKIE全局变量读cookie,在实际开发中,读写Cookie是与用户交互最主要的方式之一,并且使用也非常频繁,因些需要了解PHP在读写操作Cookie的性能与效率问题。

三,性能测试代码

编写三个函数,分别为写cookie、读cookie和读写cookie,代码如下:

 代码如下 复制代码
<?php
require_once "Benchmark/Iterate.php";
$bench = new Benchmark_Iterate;
function set(){
    setcookie("TestCookie", time(), time()+3600, "/", "", 1);
}
function get(){
    return isset($_COOKIE['TestCookie']) ? $_COOKIE['TestCookie'] : '';
}
function cookie(){
    get();
    set();
}
$bench->run(50,"set");
//$bench->run(50,"get");
//$bench->run(50,"cookie");
$result = $bench->get();
?>

使用Benchmark_Iterate类工具分别调用各个函数50次获取PHP读写Cookie的平均执行时间并生成图表。

四,性能测试结果

1,PHP写Cookie的执行时间

php-set-cookie
图解:使用PHP内置函数setcookie()向客户端发送一个 HTTP cookie,写Cookie的执行时间 0.00072s左右 注s表示秒

2,PHP读Cookie的执行时间
php-get-cookie

图解:使用全局变量$_COOKIE获取客户端cookie值,读Cookie的执行时间 0.00051s左右

3,PHP读写Cookie的执行时间
php-set-get-cookie
先读取cookie值,然后再向客户端发送一个 HTTP cookie,读写Cookie的执行时间 0.00088s左右

五,性能测试总结

通过折线图可以清楚看到,setcookie() 函数向客户端发送一个 HTTP cookie需要的执行时间大约是0.00072s左右,也就是0.7毫秒,PHP读取Cookie的执行时间为0.00051s左右,也就是0.5毫秒,如果同时读写操作Cookie需要的执行时间为0.00088s,也就是0.8毫秒左右,这些操作在秒的时代基本上执行的时间非常短,但请不要小看这个值,正常的PHP内置函数执行的时间大约在0.3毫秒左右,相对而言读写Cookie的执行时间是比较耗时的,因此,在实际开发中要尽量少用这样的函数,充分考虑读写Cookie的情况,特别是写cookie的情况!

毫秒世界还在继续,请关注下一期PHP性能优化系列。

六,setcookie函数说明

setcookie() 函数向客户端发送一个 HTTP cookie。

 代码如下 复制代码

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

1,cookie 是由服务器发送到浏览器的变量。
2,cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。
3,cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。
4,必须在任何其他输出发送前对 cookie 进行赋值。
5,如果成功,则该函数返回 true,否则返回 false。

文章利用图表来告诉你关于PHP isset()与empty()函数执行时间比较以及性能的好与坏,有需要的朋友可以详细的看看哦。性能测试采用Benchmark_Iterate类工具进行调试,主要关注isset()与empty()函数执行时间。

,测试环境
操作系统:Window XP
PHP版本:PHP Version 5.2.11
Apache版本:Apache 2.0 Handler

二,测试方法
使用Benchmark_Iterate测试isset()和empty在变量存在和不存在的情况下执行50次并生成图表

三,isset()与empty()判断变量不存在的情况
1,测试代码

 代码如下 复制代码

require_once "Benchmark/Iterate.php";
$bench = new Benchmark_Iterate;
function check1($var){
    isset($var);
}
function check2($var){
    !empty($var);
}
$bench->run(50,"check1",$var);
//$bench->run(50,"check2",$var);
$result = $bench->get();


其中$var变量并没有初始化,判断变量不存在的情况,两个函数的执行性能如下图

2,isset()判断变量不存在的情况

php-isset.png

图解:isset()判断变量不存在的情况平均执行时间在0.0010-0.0011秒之间
3,empty()判断变量不存在的情况

php-empty.png
图解:empty()判断变量不存在的情况平均执行时间在0.0010-0.0011秒之间
四,isset()与empty()判断变量存在的情况

,测试代码

 代码如下 复制代码

require_once "Benchmark/Iterate.php";
$bench = new Benchmark_Iterate;
 
function check1($var){
    isset($var);
}
function check2($var){
    !empty($var);
}
$var = true;
$bench->run(50,"check1",$var);
//$bench->run(50,"check2",$var);
$result = $bench->get();

初始化$var变量为true,判断变量存在的情况,两个函数的执行性能如下

2,isset()判断变量存在的情况

php-isset-true.png图解:isset()判断变量存在的情况平均执行时间在0.0010-0.0011秒之间
3,empty()判断变量存在的情况
php-empty-true.png图解:isset()判断变量存在的情况平均执行时间在0.0010-0.0011秒之间
综合上面的测试性能情况,可知isset()和empty()函数的执行时间基本一样,两个函数的平均执行时间在0.0010-0.0011秒之间,当然这与具体的环境有关,从当前测试环境来看,两个函数的性能是一样的。
 
[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07