- 浏览: 90531 次
文章分类
最新评论
发布:sunday01 来源:net 阅读: 2 【大 中 小】
php截取中文字符串,一般就是根据值是否大于等于128来判断是否是双字节字符,以避免出现截取不全与乱码的情况。
不过,遇到中英文混合、特殊符号也包括其中的情况时,问题就不那么容易解决了。
以下是一个全面解决中文字符串截取问题的函数,有需要的朋友可以参考下。
说明:
1、len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些
2、如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数
3、特别适用于用htmlspecialchars()进行过编码的字符串
4、能正确处理GB2312中实体字符模式(??)
例子:
<?php
/**
@截取中文字符串 适用于GB2312编码
@http://www.jbxue.com
*/
function FSubstr($title,$start,$len="",$magic=true)
{
$length = 0;
if($len == "") $len = strlen($title);
//判断起始为不正确位置
if($start > 0)
{
$cnum = 0;
for($i=0;$i<$start;$i++)
{
if(ord(substr($title,$i,1)) >= 128) $cnum ++;
}
if($cnum%2 != 0) $start--;
unset($cnum);
}
if(strlen($title)<=$len) return substr($title,$start,$len);
$alen = 0;
$blen = 0;
$realnum = 0;
for($i=$start;$i<strlen($title);$i++)
{
$ctype = 0;
$cstep = 0;
$cur = substr($title,$i,1);
if($cur == "&")
{
if(substr($title,$i,4) == "<")
{
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,4) == ">")
{
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,5) == "&")
{
$cstep = 5;
$length += 5;
$i += 4;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,6) == """)
{
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,6) == "'")
{
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(preg_match("/&#(\d+);/i",substr($title,$i,8),$match))
{
$cstep = strlen($match[0]);
$length += strlen($match[0]);
$i += strlen($match[0])-1;
$realnum ++;
if($magic)
{
$blen ++;
$ctype = 1;
}
}
}else{
if(ord($cur)>=128)
{
$cstep = 2;
$length += 2;
$i += 1;
$realnum ++;
if($magic)
{
$blen ++;
$ctype = 1;
}
}else{
$cstep = 1;
$length +=1;
$realnum ++;
if($magic)
{
$alen++;
}
}
}
if($magic)
{
if(($blen*2+$alen) == ($len*2)) break;
if(($blen*2+$alen) == ($len*2+1))
{
if($ctype == 1)
{
$length -= $cstep;
break;
}else{
break;
}
}
}else{
if($realnum == $len) break;
}
}
unset($cur);
unset($alen);
unset($blen);
unset($realnum);
unset($ctype);
unset($cstep);
return substr($title,$start,$length);
}
?>
复制以上代码,在你的php平台中进行测试吧,多动手,水平提高会更快。
脚本学堂,您学习路上的好朋友。
原始链接:http://www.jbxue.com/article/6237.html
php截取中文字符串,一般就是根据值是否大于等于128来判断是否是双字节字符,以避免出现截取不全与乱码的情况。
不过,遇到中英文混合、特殊符号也包括其中的情况时,问题就不那么容易解决了。
以下是一个全面解决中文字符串截取问题的函数,有需要的朋友可以参考下。
说明:
1、len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些
2、如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数
3、特别适用于用htmlspecialchars()进行过编码的字符串
4、能正确处理GB2312中实体字符模式(??)
例子:
<?php
/**
@截取中文字符串 适用于GB2312编码
@http://www.jbxue.com
*/
function FSubstr($title,$start,$len="",$magic=true)
{
$length = 0;
if($len == "") $len = strlen($title);
//判断起始为不正确位置
if($start > 0)
{
$cnum = 0;
for($i=0;$i<$start;$i++)
{
if(ord(substr($title,$i,1)) >= 128) $cnum ++;
}
if($cnum%2 != 0) $start--;
unset($cnum);
}
if(strlen($title)<=$len) return substr($title,$start,$len);
$alen = 0;
$blen = 0;
$realnum = 0;
for($i=$start;$i<strlen($title);$i++)
{
$ctype = 0;
$cstep = 0;
$cur = substr($title,$i,1);
if($cur == "&")
{
if(substr($title,$i,4) == "<")
{
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,4) == ">")
{
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,5) == "&")
{
$cstep = 5;
$length += 5;
$i += 4;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,6) == """)
{
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,6) == "'")
{
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic)
{
$alen ++;
}
}
else if(preg_match("/&#(\d+);/i",substr($title,$i,8),$match))
{
$cstep = strlen($match[0]);
$length += strlen($match[0]);
$i += strlen($match[0])-1;
$realnum ++;
if($magic)
{
$blen ++;
$ctype = 1;
}
}
}else{
if(ord($cur)>=128)
{
$cstep = 2;
$length += 2;
$i += 1;
$realnum ++;
if($magic)
{
$blen ++;
$ctype = 1;
}
}else{
$cstep = 1;
$length +=1;
$realnum ++;
if($magic)
{
$alen++;
}
}
}
if($magic)
{
if(($blen*2+$alen) == ($len*2)) break;
if(($blen*2+$alen) == ($len*2+1))
{
if($ctype == 1)
{
$length -= $cstep;
break;
}else{
break;
}
}
}else{
if($realnum == $len) break;
}
}
unset($cur);
unset($alen);
unset($blen);
unset($realnum);
unset($ctype);
unset($cstep);
return substr($title,$start,$length);
}
?>
复制以上代码,在你的php平台中进行测试吧,多动手,水平提高会更快。
脚本学堂,您学习路上的好朋友。
原始链接:http://www.jbxue.com/article/6237.html
发表评论
-
apache2禁止显示目录列表的方法(转)
2016-03-15 16:22 945apache2禁止显示目录列表的修改方法 时间:20 ... -
php序列化函数数组与对象的方法
2016-03-15 16:13 508php序列化函数数组与对象的方法 时间:2015-1 ... -
ThinkPHP登录功能实例代码详解
2014-08-21 06:38 713分享下ThinkPHP登录功能的实现方法,是采用ThinkP ... -
几个php文件下载实例代码
2014-08-20 06:30 1042一个简单的php文件下载 ... -
php实现文件下载实例代码分享
2014-08-20 06:29 648php实现对文件下载需要http协议基础,php文件下载用到 ... -
php正则表达式入门-常用语法格式
2014-08-18 20:15 515php正则表达式入门-常 ... -
帝国cms如何用自定义函数获取新闻文章数
2014-08-14 21:55 474原文地址:http://www.jbxue.com/cms ... -
PHP生成随机用户名和密码人例子
2014-07-25 06:15 467使用PHP生成随机数可以应用在许多地方,比如可以设计程序的随 ... -
PHP下载文件方法实例教程
2014-07-25 06:14 513PHP下载文件的两种方法与代码分享 转自:http:/ ... -
php读取mysql数据库入门实例
2014-06-26 06:04 546原文链接:http://www.jbxu ... -
php读取sqlite数据库入门实例
2014-06-26 06:03 802分享一个读取sqlite数据的例子,php读取sqlite数 ... -
php curl 伪造IP来源 示例
2014-04-16 06:56 656php curl 太强大了,它不但可以模仿用户登录,还可以模仿 ... -
PHP 获取目录下的图片并随机显示 实例
2014-04-16 06:53 681从一个目录里获取某类 ... -
PHP图片上传代码一例
2014-01-02 06:47 696分享一个php图片上传代码,如下: ... -
PHP数字验证码的例子
2014-01-02 06:46 767在php中实现验证码,关键点在于掌握php gd库与sess ... -
ajax返回json类型的数据 js处理json类型的数据
2013-12-27 07:07 522ajax验证用户名 index_do. ... -
php解析xml
2013-12-27 07:03 5091,index.php <html> & ... -
PHP AJAX实现省市联动
2013-12-27 07:02 6361,province.php <html> ... -
PHP生成HTML静态页面实例代码
2013-12-15 08:21 547功能:从PHP生成HTML静态页面并存储到以年份和月份为名称 ... -
用PHP实现 上一篇、下一篇的代码
2013-12-15 08:18 558主页是index.php;传递的值是id(数据库的主键);文 ...
相关推荐
在PHP中处理中文字符串截取是一项常见的任务,尤其是在网页开发中。中文字符串通常包含UTF-8编码的字符,这与ASCII编码的英文字符串处理方式有所不同。以下将详细讲解如何在PHP中正确截取中文字符串。 首先,我们...
Substring截取字符串字符串截取方法是指从字符串中提取某一段子字符串的过程,通常会使用“切割”的方式,把字符串的一段子字符串截取出来,该子字符串以索引指定,也可以使用正则表达式或函数实现字符串截取。...
### PHP字符串截取知识点解析 #### 一、概述 在PHP开发中,处理字符串是非常常见的需求之一,尤其是在处理中文字符时。本篇文章将详细介绍几种在PHP中实现字符串截取的方法,包括针对不同编码(如GB2312与UTF-8)...
"php通用截取字符串"这个主题主要涉及如何在PHP中对字符串进行截取,以便获取我们感兴趣的特定部分。这通常用于显示预览、处理用户输入或者从长文本中提取关键信息。在PHP中,有多种方法可以实现字符串截取,下面...
总的来说,这个PHP字符串截取类为开发者提供了一种强大的工具,帮助他们更方便地处理字符串操作,尤其是在处理具有特定结构的数据时。通过理解和使用这个类,可以提高代码的效率和可读性,减少重复的工作,并且能够...
字符串截取在php开发中是比较常用的; 而且对于截取的需求也有很多种; 有时我们想截取最后一个斜杠’/’后面的数字; 有时我们又需要截取第一个斜杠’/’前面的内容判断用户输入的url链接带不带http://等等; 字符...
一个php截取指定字符串之间的字符串的类,介绍一个php截取指定字符串之间的字符串的类,需要的朋友可以自行下载学习使用。
在Python中,可以使用内置的`[start:end]`切片操作来截取字符串。如果要考虑字节,我们需要使用`encode()`方法将字符串转化为字节串,因为Python的切片默认是基于字符的。例如: ```python s = "你好,世界" byte_s...
总之,"php不破坏单词截取子字符串类.zip" 是一个旨在优化字符串截取体验的PHP类库,它可以帮助开发者在处理文本时保持词汇的完整性,提高代码的可读性和用户体验。通过理解和使用这个类库,我们可以更好地控制和...
在PHP中,字符串截取函数是一个基本的函数,但是它不能正确地处理中文字符串,因为中文字符串在UTF-8编码中占用多个字节,而PHP的截取函数只能截取固定长度的字符串,无法正确地截取中文字符串。因此,需要开发一个...
这段代码会正确地截取字符串,即使其中包含了中文和英文字符。 然而,有时候我们可能需要根据字节数而不是字符数来截取,例如限制输出的字节数。这时,我们需要计算每个字符的字节数,并相应调整`start`和`length`...
### PHP字符串截取详解 #### 一、GB2312中文字符串截取方法解析 在处理中文字符串时,特别是对于较旧的编码格式如GB2312,我们需要特别注意字符的编码方式以避免截取后出现乱码。下面详细介绍了一个针对GB2312编码...
虽然这个类可能没有使用正则表达式,但在复杂的字符串截取场景中,正则表达式是非常强大的工具。例如,`preg_match_all()`可以用来提取所有匹配模式的子串,`preg_replace()`则能进行更复杂的替换操作。 5. **类库...
在PHP编程语言中,处理字符串是一项常见的任务,其中包括截取字符串。然而,普通的截取方法如`substr()`可能在处理英文文本时导致单词被割裂,影响可读性。为了解决这个问题,我们可以使用特定的类或函数来实现“不...
本文将详细介绍几个用于处理中文字符串截取的PHP函数,以及它们的工作原理。 首先,`sysSubStr` 函数是针对UTF-8编码的中文字符串设计的。该函数通过检查每个字符的ASCII值来确定它是否是多字节的中文字符。如果...
在PHP程序设计中,字符串处理是一项基础且重要的技能,特别是在文档标题提到的“3期(KC016)2.8.3字符串截取”这一部分。字符串截取是指从一个较长的字符串中提取出一部分内容,这在很多场景下都非常常见,比如处理...
php 截取包含中文的字符串
该文档主要介绍了一段PHP代码,用于实现英文字符串截取的同时保证单词的完整性。此代码的功能是对一段字符串进行截取,但在截取的过程中,会检查单词是否会被不恰当地切断,如果是,则会相应地调整截取范围,确保不...