PHP strlen和mb_strlen的区别

 更新时间:2016年11月25日 15:48  点击:1506
我初步理解是strlen只能计算英文字符,而mb_strlen是可以计算中文与英文字符的长度,下面我来详细的介绍 strlen和mb_strlen的区别.

定义和用法

strlen() 函数返回字符串的长度。

语法

strlen(string)参数 描述
string 必需。规定要检查的字符串。

而mb_strlen()函数的参考也是一样的。

例子

 代码如下 复制代码

<?php
$str=‘中文a字1符‘;
echo strlen($str);
echo ‘<br />‘;
echo mb_strlen($str,‘UTF8‘);
//输出结果
//14
//6
?>

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14
在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得 到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在 UTF-8编码下,一个汉字占3个字节)。

采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和 strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用 mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。


注意事项

php默认是不支持mb_strlen()函数的,需要安装扩展模块。安装方法如下:

 代码如下 复制代码

yum install php-mbstring

找到mbstring.so的位置,可以使用rpm -ql 安装的rpm名

修改/etc/php.ini配置文件,增加

 代码如下 复制代码

extension=php_mbstring.so

并确保php_mbstring.so模块在extension_dir = "/usr/lib64/php/modules"配置所指的路径里。

在php中定时执行任务我们会用到函数,ignore_user_abort(),set_time_limit(0),sleep($interval) 它些函数组成的定时执行任务只要在浏览器执行一次,关了浏览器也不会有影响的

例(利用php自带函数)

 代码如下 复制代码

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行
do{
 //这里是你要执行的代码 
 sleep($interval);// 等待5分钟
}while(true);


ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.

set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去

$interval=60*30;// 每隔半小时运行

windows 的计划任务

写一个PHP程序,命名为test.php,内容如下所示:

 代码如下 复制代码

<?

$fp = fopen("test.txt", "a+");

fwrite($fp, date("Y-m-d H:i:s") . " 成功成功了!n");

fclose($fp);

?>

2、新建Bat文件,命名为test.bat,内容如下所示:

 代码如下 复制代码

1 D:/php/php.exe -q D:/website/test.php

//相应目录自己改上

3、建立WINDOWS计划任务:

开始–>控制面板–>任务计划–>添加任务计划

浏览文件夹选择上面的bat文件设置时间和密码(登陆WINDOWS的)保存即可了。

在php中我们可以利用ftp_connect相关函数实现文件上传与下载功能,其实就是ftp客户端一样的操作,下面我来给大家介绍如何利用php来实现。

php的代码如下

 代码如下 复制代码

$ftp_server='www.111cn.net';//服务器
$ftp_user_name='111cn.net';//用户名
$ftp_user_pass='password';//密码
$ftp_port='21';//端口
$ftp_put_dir='data/photo/thumb/data2';//上传目录

$ftp_conn_id = ftp_connect($ftp_server,$ftp_port);
$ftp_login_result = ftp_login($ftp_conn_id, $ftp_user_name, $ftp_user_pass);

if((!$ftp_conn_id) || (!$ftp_login_result)) {
echo'连接到ftp服务器失败';
exit;
}else{

ftp_pasv($ftp_conn_id,true); //返回一下模式,这句很奇怪,有些ftp服务器一定需要执行这句

ftp_chdir($ftp_conn_id, $ftp_put_dir);
$ftp_upload = ftp_put($ftp_conn_id, '3c264461abdf49de2ddaabc3426ceb65.jpg', 'data111cn.net3c264461abdf49de2ddaabc3426ceb65.jpg', FTP_BINARY);
//var_dump($ftp_upload);//看看是否写入成功
ftp_close($ftp_conn_id); //断开
}

注解

ftp_connect() 函数建立一个新的 FTP 连接。

若成功,则返回一个连接标识,否则返回 false。

The ftp_login() function logs in to the specified FTP connection.
ftp_login()函数的作用是:登录 FTP 服务器。

This function returns TRUE on success and FALSE and a warning on failure.
如果函数成功执行将返回True;如果失败将返回False,并给出警告。

ftp_put() 函数把文件上传到服务器。

若成功则返回 true,失败则返回 false。

本文章简单总结的一个PHP if和or哪个效率对比程序,大家可参考参考。

实例说明

 代码如下 复制代码

<?php
$t1 = microtime();
 
while($i<=10000){
    if(!defined('APP_PATH'));      // 0.011059
    // defined('APP_PATH') OR 1;   // 0.009398
    $i++;
}
 
$t2 = microtime();
echo $t2 - $t1;
?>

例2

 代码如下 复制代码

<?php
$t1 = microtime();
 
while($i<=1000000){
    if(!defined('APP_PATH'));      //0.20043
    // defined('APP_PATH') OR 1;   //0.107475
    $i++;
}
 
$t2 = microtime();
echo $t2 - $t1;
?>

大家去测试一下吧这里我测试了的结果是or 比if效率要高一些哦。

在php中我们合并数据有两种简单快速的方式一种方式是利用array_merge()函数来操作,另一种办法是利用+号,下面我们来看看哈。

用法

array array_merge ( array $array1 [, array $array2 [, array $... ]] )

例子 1

 代码如下 复制代码
<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));
?>

输出:

 代码如下 复制代码

Array ( [a] => Horse [b] => Cat [c] => Cow )

例子2

 代码如下 复制代码

<?php
echo "rn第一种情况rn";
$a=array(1,2,3,4,5,6);
$b=array(7,8,9);
 
$c=array_merge ($a,$b);
print_r($c);
$c=$a+$b;
print_r($c);
$c=$b+$a;
print_r($c);
 
 
echo "rn第二种情况rn";
$a=array('a','b','c','d','e','f');
$b=array('a','x','y');
 
$c=array_merge ($a,$b);
print_r($c);
$c=$a+$b;
print_r($c);
$c=$b+$a;
print_r($c);
 
 
echo "rn第三种情况rn";
 
$a=array(
 1=>'a',
 2=>'b',
 3=>'c',
 4=>'d',
 5=>'e',
 6=>'f');
$b=array(
 1=>'a',
 7=>'x',
 8=>'y');
 
$c=array_merge ($a,$b);
print_r($c);
$c=$a+$b;
print_r($c);
$c=$b+$a;
print_r($c);
?>

[!--infotagslink--]

相关文章

  • mysql_connect与mysql_pconnect的区别详解

    在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍mysql_connect与mysql_pconnect的区别,有需要了解...2016-11-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • C#中out与ref的区别实例解析

    这篇文章主要介绍了C#中out与ref的区别实例解析,对C#初学者有不错的学习借鉴价值,需要的朋友可以参考下...2020-06-25
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • 谈谈Jquery中的children find 的区别有哪些

    精华:find方法能找子孙,children方法只能找儿子一、Jquery中children 语法.children(selector) 说明expr是表达式,可选参数,所有选择器中的表达式都可以用在这,比如按标签名"div",按类名".class",按序号":first"等等,如果表...2015-10-21
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • PS中像素大小、文档大小的区别

    在PS中像素大小、文档大小有什么区别呢,这个估计很多初学者不清楚,下面我来给大家讲解一下,希望对你有帮助。 1、像素大小 通常用于显示屏显示的图片大小的调整。菜...2016-09-14
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • C#中sleep和wait的区别分析

    这篇文章主要介绍了C#中sleep和wait的区别分析,有助于深入理解C#中线程的原理与使用技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • uniapp和vue的区别详解

    这篇文章主要介绍了uniapp和vue的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-10-19
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12