- 浏览: 85388 次
文章分类
最新评论
介绍下php中有关字符串截取的一些问题与解决方法。
在英文和汉字混合的情况下会出现如下问题:
如果有这样一个字符串
$str="这是一个字符串";
为了截取该串的前10个字符,使用
if(strlen($str)>10) $str=substr($str,10)."…";
那么,echo $str的输出应该是"这是一个字…"
假设
$str="这是1个字符串";
这个串中包含了一个半角字符,同样执行:
if(strlen($str)>10) $str=substr($str,10);
由于原字符串$str的第10、11个字符构成了汉字“符”;
执行串分割后会将该汉字一分为二,这样被截取的串就会发现乱码现象。
请问这种问题如何解决?即要使过长字符串实现分割,又不能让它发生乱码?
1. 截取GB2312中文字符串
2. 截取utf8编码的多字节字符串
3. UTF-8、GB2312都支持的汉字截取函数
4. BugFree 的字符截取函数
在英文和汉字混合的情况下会出现如下问题:
如果有这样一个字符串
$str="这是一个字符串";
为了截取该串的前10个字符,使用
if(strlen($str)>10) $str=substr($str,10)."…";
那么,echo $str的输出应该是"这是一个字…"
假设
$str="这是1个字符串";
这个串中包含了一个半角字符,同样执行:
if(strlen($str)>10) $str=substr($str,10);
由于原字符串$str的第10、11个字符构成了汉字“符”;
执行串分割后会将该汉字一分为二,这样被截取的串就会发现乱码现象。
请问这种问题如何解决?即要使过长字符串实现分割,又不能让它发生乱码?
<?php //村里有很多,这个是gb2312 function substrs($content,$length='30') { if($length && strlen($content)>$length) { $num=0; for($i=0;$i<$length-3;$i++) { if(ord($content[$i])>127) { $num++; } } $num%2==1 ? $content=substr($content,0,$length-4):$content=substr($content,0,$length-3); } return $content; } ?>
function cutstr($string, $length, $dot = ' ...') { $strcut = ''; for($i = 0; $i < $length - strlen($dot) - 1; $i++) { $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i]; } return $strcut.$dot; }
function cutTitle($str, $len, $tail = ""){ $length = strlen($str); $lentail = strlen($tail); $result = ""; if($length > $len){ $len = $len - $lentail; for($i = 0;$i < $len;$i ++){ if(ord($str[$i]) < 127){ $result .= $str[$i]; }else{ $result .= $str[$i]; ++ $i; $result .= $str[$i]; } } $result = strlen($result) > $len ? substr($result, 0, -2) . $tail : $result . $tail; }else{ $result = $str; } return $result; }
1. 截取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; }//www.jbxue.com ?>
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 * @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 = "www.jbxue.com"; $Length = "18"; $Append = false; echo sysSubStr($String,$Length,$Append); ?>
发表评论
-
apache2禁止显示目录列表的方法(转)
2016-03-15 16:22 897apache2禁止显示目录列表的修改方法 时间:20 ... -
php序列化函数数组与对象的方法
2016-03-15 16:13 465php序列化函数数组与对象的方法 时间:2015-1 ... -
ThinkPHP登录功能实例代码详解
2014-08-21 06:38 663分享下ThinkPHP登录功能的实现方法,是采用ThinkP ... -
几个php文件下载实例代码
2014-08-20 06:30 998一个简单的php文件下载 ... -
php实现文件下载实例代码分享
2014-08-20 06:29 604php实现对文件下载需要http协议基础,php文件下载用到 ... -
php正则表达式入门-常用语法格式
2014-08-18 20:15 472php正则表达式入门-常 ... -
帝国cms如何用自定义函数获取新闻文章数
2014-08-14 21:55 432原文地址:http://www.jbxue.com/cms ... -
PHP生成随机用户名和密码人例子
2014-07-25 06:15 421使用PHP生成随机数可以应用在许多地方,比如可以设计程序的随 ... -
PHP下载文件方法实例教程
2014-07-25 06:14 474PHP下载文件的两种方法与代码分享 转自:http:/ ... -
php读取mysql数据库入门实例
2014-06-26 06:04 508原文链接:http://www.jbxu ... -
php读取sqlite数据库入门实例
2014-06-26 06:03 756分享一个读取sqlite数据的例子,php读取sqlite数 ... -
php curl 伪造IP来源 示例
2014-04-16 06:56 614php curl 太强大了,它不但可以模仿用户登录,还可以模仿 ... -
PHP 获取目录下的图片并随机显示 实例
2014-04-16 06:53 628从一个目录里获取某类 ... -
PHP图片上传代码一例
2014-01-02 06:47 649分享一个php图片上传代码,如下: ... -
PHP数字验证码的例子
2014-01-02 06:46 723在php中实现验证码,关键点在于掌握php gd库与sess ... -
ajax返回json类型的数据 js处理json类型的数据
2013-12-27 07:07 481ajax验证用户名 index_do. ... -
php解析xml
2013-12-27 07:03 4631,index.php <html> & ... -
PHP AJAX实现省市联动
2013-12-27 07:02 5751,province.php <html> ... -
PHP生成HTML静态页面实例代码
2013-12-15 08:21 490功能:从PHP生成HTML静态页面并存储到以年份和月份为名称 ... -
用PHP实现 上一篇、下一篇的代码
2013-12-15 08:18 510主页是index.php;传递的值是id(数据库的主键);文 ...
相关推荐
本文实例总结了php中文字符串截取方法,非常实用的技巧。分享给大家供大家参考。具体方法分析如下: 用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半。 解决办法...
解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况。但中英文混合、特殊符号等问题总是存在,现在写一个比较全面的。
但是在英文和汉字混合的情况下会出现如下问题: 如果有这样一个字符串 $str=”这是一个字符串”; 为了截取该串的前10个字符,使用 if(strlen($str)>10) $str=substr($str,10).”…”; 那么,echo $str的输出应该是...
本文实例讲述了Joomla框架实现字符串截取的方法。分享给大家供大家参考,具体如下: 在用joomla进行开发的时候,需要用到国外的资源,一些module,组件,插件之类的,但是我们会发现,在字符串这个方法都需要进行...
主要介绍了PHP实现截取中文字符串不出现?号的解决方法,涉及php字符串遍历及编码转换等相关操作技巧,需要的朋友可以参考下
substr — 取得部份字符串 语法 : string substr (string string, int start [, int length]) 说明 : substr( )传回 string的一部份字符串,由参数 start和 length指定。 如果 start是正数,传回的字符串将会从 ...
一个比较好用的字符串截取函数: function substring($str, $start, $length){ //比较好用字符串截取函数 $len = $length; if($length < 0){ $str = strrev($str); $len = -$length; } $len= ($len < ...
在PHP中截取UTF-8编码的字符串时,有可能碰到半字符的问题,也就是乱码,以下函数可以解决这个问题
使用mapxtreme7 开发时,使用Feature.Update()方法时出错的提示包含“MSSQL 将截断字符串或二进制数据” 主要原因就是给某个字段赋值时,内容大于字段的长度或类型不符造成的 解决方法: 一个是修改数据库字段大小;...
在php中如果我要用substr()截取字符串全英文的没问题,如果包括有中文或英文就会悲剧了,但大家也 别切我们可以使用其它办法来解决。 php截取中文字符串出现乱码,这是最近发现的事情,先前我曾经写过一篇关于自动...
对于ThinkPHP的截取字符串函数无法显示省略号的情况,解决方法如下: 打开Common/extend.php页面,修改msubstr函数如下: function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) { if...
主要介绍了PHP中实现中文字串截取无乱码的解决方法,直接使用PHP函数substr截取中文字符可能会出现乱码,下面跟随脚本之家小编一起看看具体解决方法吧
但是要匹配一个字符串中,不包含某字符串,用正则就比较麻烦了 如果不用正则 !strstr($str, “abc”); 就可以解决问题了 但是用正则呢,就只有这样了,”/^((?!abc).)*$/is” //————————————————...
前言 众所周知Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换...解决这个方法只有提前把num转换为字符串类型,可以使用bytes函数把int型转换为string型。 代码: # coding=utf8 str = '你的分数是:' n
例如,您可以学习如何使用内置函数处理字符串,比如字符串截取、替换、连接和格式化。您还可以了解如何创建和操作数组,包括排序、过滤和遍历数组中的元素。此外,您还可以学习如何读取和写入文件,以及如何执行...
号去掉,这样mb_substr函数就可以生效了 mb_strcut函数功能也可以截取字符串长度,下面实例具体看看区别在哪: 复制代码 代码如下:<?php $str = ‘这样一来我的字符串就不会有乱码^_^’; echo “mb_substr:” . ...