substr,mb_substr,iconv_substr,array_slice
通过一个例子来看其关系
/**
+----------------------------------------------------------
* 字符串截取,支持中文和其他编码
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @param string $str 需要转换的字符串
* @param string $start 开始位置
* @param string $length 截取长度
* @param string $charset 编码格式
* @param string $suffix 截断显示字符
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
if(function_exists("mb_substr"))
return mb_substr($str, $start, $length, $charset);
elseif(function_exists('iconv_substr')) {
return iconv_substr($str,$start,$length,$charset);
}
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
//通过preg_match_all将$str字符串进行编码,并返回给$match[0],按序排列组成数组
//通过array_slice将数组进行切割,然后通过join将切割后的数组的key进行连接
$slice = join("",array_slice($match[0], $start, $length));
if($suffix) return $slice."…";
return $slice;
}
其中,join是implode的别名函数,将数组拼接成字符串,如果是关联数组,则只会进行key的连接
array_slice可以指定开始位置,和截取长度,进行切割
$str1 = "卧室字符串";
echo mb_substr($str1,0,4,'utf-8')."\n";
echo mb_strcut($str1,0,4,'utf-8')."\n";
echo substr($str1,0,4)."\n";
上例输出:
卧室字符
卧
卧�
可以看出substr是不支持中文的,但是mb_sbustr在安装php的时候需要安装mbstring扩展支持,windows服务器如果没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll打开
mb_substr和mb_struct 加上第三个参数后可以支持中文,但是mb_substr是按照字来截取的,mb_struct 是按字节截取的,但是两者都不会截取成半个字。。。
substr,mb_substr,iconv_substr,array_slice的更多相关文章
- substr mb_substr mbstrct 的用法区别
1.substr遇到中文会出问题,用于截取英文字符 2.mb_substr() 按字符截取字符串,需要开启php_mbstring.dll <?php echo mb_substr(, , 'u ...
- (转载)PHP substr(),mb_substr()及mb_strcut的区别和用法
(转载)http://blog.csdn.net/alongken2005/article/details/7098506 PHP substr()函数可以 分割文字,但要分割的文字如果包括中文字符往 ...
- 转载:substr() mb_substr() mb_subcut区别与联系
substr() $rest = substr("abcdef", 1); //bcdef $rest = substr("abcdef", 1,5); //b ...
- 一个例子说明substr(), mb_substr() 和 mb_strcut()之间的区别
例子来自PHP官方文档,我只是翻译下. http://www.php.net/manual/zh/function.mb-strcut.php header( 'Content-Type:text/h ...
- php substr,iconv_substr,mb_substr
php进行中文字符串的截取时,会经常用到二个函数iconv_substr和mb_substr,对这二个函数应该如何选择呢?参考下本文介绍的例子就明白了. 示例代码,用到了函数substr与iconv_ ...
- PHP,mysql,Linux,CI框架学习总结
PHP,mysql,CI框架学习总结 PHP标记 1.Xml风格<?php ?> 2.简短风格 <? ?> 需在php.ini中开启short_open_tag 3.asp风格 ...
- PHP配置详解
[PHP] ;;;;;;;;;;;;;;;;;;; ; About php.ini ; ;;;;;;;;;;;;;;;;;;; ; This file controls many aspects of ...
- 最完整PHP.INI中文版
;;;;;;;;;;;;;;;;;;; 关于php.ini ;;;;;;;;;;;;;;;;;;;; 这个文件必须命名为'php.ini'并放置在httpd.conf中PHPINIDir指令指定的目录 ...
- Web服务器上可能被包含或被请求的不同脚本源代码文件
Web服务器上可能被包含或被请求的不同脚本源代码文件的大致数量(建议值为1024~4096). ; 如果你不能确定,则设为 0 :此设定主要用于拥有数千个源文件的站点. apc.optimizatio ...
随机推荐
- /var/spool/postfix/maildrop小文件太多造成inode索引使用完解决
/var/spool/postfix/maildrop 小文件太多造成inode索引使用完解决办法 问题表现和检查: 1.运行df -i / 查看inode使用是否满: 2.查看/var/spool/ ...
- 1027 姓名与ID[二分图匹配(匈牙利)]
1027 姓名与ID 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 有N个人,各自有一 ...
- css去掉默认的下拉,实现用户自定义的下拉列表
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Python(2.7.6) 标准日志模块 - Logging Configuration
除了使用 logging 模块中的 basicConfig 方法配置日志, Python 的 logging.config 模块中, dictConfig 和 fileConfig 方法分别支持通过字 ...
- CSS其他
1.元素的宽度由内容撑开 display:inline;——不支持高度 display:inline-block;——在IE6下,不支持块标签 float position:absolute——每项设 ...
- PHP与javascript实现变量交互
<?php /** * 本例是PHP和javascript交互的例子,php中的值赋给js变量中,前提是这个php变量必须有值才行,就算是假分支中. * 比如php中的$flags在本例中为tr ...
- Java JPushV3服务端
因为JPush的官方文档太乱,所以依据原理自行实现. 主要技术就是post数据到https上和https的auth,实现起来还是很容易的. http://pan.baidu.com/s/1sjEc74 ...
- CSS之页面添加标签
就是因为昨天弄这个“神奇的小标签”差点把自己的园子给废了(情节真的有这么严重),说多了都是泪啊~~(┳_┳).本来是想在页首添加这个“神奇的小标签”的,不知是插件有BUG还是代码错误当场就导致不能编辑 ...
- 23----2013.07.01---Div和Span区别,Css常用属性,选择器,使用css的方式,脱离文档流,div+css布局,盒子模型,框架,js基本介绍
01 复习内容 复习之前的知识点 02演示VS创建元素 03div和span区别 通过display属性进行DIV与Span之间的转换.div->span 设置display:inline ...
- jQuery Ajax应用
jQuery Ajax应用 本章主要了解jQuery的Ajax与传统的Ajax的区别,掌握JQuery的Ajax常用的方法与Ajax相关的函数. 详细内容,请点击jQuery Ajax应用查看: