`

php中文字符串截取 php截取中文字符串的代码

    博客分类:
  • php
阅读更多
发布: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中如何截取中文字符串

    在PHP中处理中文字符串截取是一项常见的任务,尤其是在网页开发中。中文字符串通常包含UTF-8编码的字符,这与ASCII编码的英文字符串处理方式有所不同。以下将详细讲解如何在PHP中正确截取中文字符串。 首先,我们...

    substring截取字符串 字符串截取方法

    Substring截取字符串字符串截取方法是指从字符串中提取某一段子字符串的过程,通常会使用“切割”的方式,把字符串的一段子字符串截取出来,该子字符串以索引指定,也可以使用正则表达式或函数实现字符串截取。...

    php字符串截取.pdf

    ### PHP字符串截取知识点解析 #### 一、概述 在PHP开发中,处理字符串是非常常见的需求之一,尤其是在处理中文字符时。本篇文章将详细介绍几种在PHP中实现字符串截取的方法,包括针对不同编码(如GB2312与UTF-8)...

    php通用截取字符串.zip

    "php通用截取字符串"这个主题主要涉及如何在PHP中对字符串进行截取,以便获取我们感兴趣的特定部分。这通常用于显示预览、处理用户输入或者从长文本中提取关键信息。在PHP中,有多种方法可以实现字符串截取,下面...

    一个php截取指定字符串之间的字符串的类

    总的来说,这个PHP字符串截取类为开发者提供了一种强大的工具,帮助他们更方便地处理字符串操作,尤其是在处理具有特定结构的数据时。通过理解和使用这个类,可以提高代码的效率和可读性,减少重复的工作,并且能够...

    PHP按符号截取字符串的指定部分的实现方法

    字符串截取在php开发中是比较常用的; 而且对于截取的需求也有很多种; 有时我们想截取最后一个斜杠’/’后面的数字; 有时我们又需要截取第一个斜杠’/’前面的内容判断用户输入的url链接带不带http://等等; 字符...

    php截取指定字符串之间的字符串的类.zip

    一个php截取指定字符串之间的字符串的类,介绍一个php截取指定字符串之间的字符串的类,需要的朋友可以自行下载学习使用。

    字符串按照指定的字节数来截取

    在Python中,可以使用内置的`[start:end]`切片操作来截取字符串。如果要考虑字节,我们需要使用`encode()`方法将字符串转化为字节串,因为Python的切片默认是基于字符的。例如: ```python s = "你好,世界" byte_s...

    php不破坏单词截取子字符串类.zip

    总之,"php不破坏单词截取子字符串类.zip" 是一个旨在优化字符串截取体验的PHP类库,它可以帮助开发者在处理文本时保持词汇的完整性,提高代码的可读性和用户体验。通过理解和使用这个类库,我们可以更好地控制和...

    php中的一个中文字符串截取函数

    在PHP中,字符串截取函数是一个基本的函数,但是它不能正确地处理中文字符串,因为中文字符串在UTF-8编码中占用多个字节,而PHP的截取函数只能截取固定长度的字符串,无法正确地截取中文字符串。因此,需要开发一个...

    PHP 不区分中英文截取utf8字符串

    这段代码会正确地截取字符串,即使其中包含了中文和英文字符。 然而,有时候我们可能需要根据字节数而不是字符数来截取,例如限制输出的字节数。这时,我们需要计算每个字符的字节数,并相应调整`start`和`length`...

    php字符串截取[文].pdf

    ### PHP字符串截取详解 #### 一、GB2312中文字符串截取方法解析 在处理中文字符串时,特别是对于较旧的编码格式如GB2312,我们需要特别注意字符的编码方式以避免截取后出现乱码。下面详细介绍了一个针对GB2312编码...

    一个php截取指定字符串之间的字符串的类.zip

    虽然这个类可能没有使用正则表达式,但在复杂的字符串截取场景中,正则表达式是非常强大的工具。例如,`preg_match_all()`可以用来提取所有匹配模式的子串,`preg_replace()`则能进行更复杂的替换操作。 5. **类库...

    php不破坏单词截取子字符串类

    在PHP编程语言中,处理字符串是一项常见的任务,其中包括截取字符串。然而,普通的截取方法如`substr()`可能在处理英文文本时导致单词被割裂,影响可读性。为了解决这个问题,我们可以使用特定的类或函数来实现“不...

    多个PHP中文字符串截取函数

    本文将详细介绍几个用于处理中文字符串截取的PHP函数,以及它们的工作原理。 首先,`sysSubStr` 函数是针对UTF-8编码的中文字符串设计的。该函数通过检查每个字符的ASCII值来确定它是否是多字节的中文字符。如果...

    PHP程序设计-3期(KC016) 2.8.3字符串截取 常见问题.docx

    在PHP程序设计中,字符串处理是一项基础且重要的技能,特别是在文档标题提到的“3期(KC016)2.8.3字符串截取”这一部分。字符串截取是指从一个较长的字符串中提取出一部分内容,这在很多场景下都非常常见,比如处理...

    php 截取包含中文的字符串

    php 截取包含中文的字符串

    可以保证单词完整性的PHP英文字符串截取代码分享

    该文档主要介绍了一段PHP代码,用于实现英文字符串截取的同时保证单词的完整性。此代码的功能是对一段字符串进行截取,但在截取的过程中,会检查单词是否会被不恰当地切断,如果是,则会相应地调整截取范围,确保不...

Global site tag (gtag.js) - Google Analytics