php 字符截取函数 substr 与自定中英文截取函数

substr实例

$content ='i love you www.111cn.net';

 $temp = substr($content,4);

echo $temp;

结果:

love you www.111cn.net' //

下面来看看从右边取函数。

 $temp = substr($temp,0,-4);

结果为:

i love www.111c

好了,下面我们再来看中文截函数吧。

function MooCutstr($string, $length, $dot = ' ...') {
 global $charset;

 if(strlen($string) <= $length) {
  return $string;
 }
 $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $string);
 $strcut = '';
 if(strtolower($charset) == 'utf-8') {
  $n = $tn = $noc = 0;
  while($n < strlen($string)) {
   $t = ord($string[$n]);
   if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
    $tn = 1; $n++; $noc++;
   } elseif (194 <= $t && $t <= 223) {
    $tn = 2; $n += 2; $noc += 2;
   } elseif (224 <= $t && $t < 239) {
    $tn = 3; $n += 3; $noc += 2;
   } elseif (240 <= $t && $t <= 247) {
    $tn = 4; $n += 4; $noc += 2;
   } elseif (248 <= $t && $t <= 251) {
    $tn = 5; $n += 5; $noc += 2;
   } elseif ($t == 252 || $t == 253) {
    $tn = 6; $n += 6; $noc += 2;
   } else {
    $n++;
   }
   if($noc >= $length) {
    break;
   }
  }
  if($noc > $length) {
   $n -= $tn;
  }
  $strcut = substr($string, 0, $n);
 } else {
  for($i = 0; $i < $length; $i++) {
   $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
  }
 }
 //$strcut = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $strcut);

 return $strcut.$dot;
}

php substr它不能自动识别中英,所以很多朋友在用substr读取中文与英的字符串会有时会出现乱码了,使用第二种方法就OK了。

时间: 2024-07-29 20:20:37

php 字符截取函数 substr 与自定中英文截取函数的相关文章

php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析_php实例

示例代码,用到了函数substr与iconv_substr,mb_substr 复制代码 代码如下: <html><head><meta charset='utf-8'><title>截取中文字符串__www.jb51.net</title></head><body><?php$str='123456欢迎大家的光临';echo substr($str,0,4);echo '<br>';echo iconv

php简简单单搞定中英文混排字符串截取,只需2行代码!

提到中英文混排计数.截取,大家首先想到的是ascii.16进制.正则匹配.循环计数.   今天我给大家分享的是php的mb扩展,教你如何轻松处理字符串.       先给大家介绍用到的函数:   mb_strwidth($str, $encoding) 返回字符串的宽度   $str 要计算的字符串   $encoding 要使用的编码,如 utf8.gbk   mb_strimwidth($str, $start, $width, $tail, $encoding) 按宽度截取字符串   $s

常常会用到的截取字符串substr()、substring()、slice()方法详解_javascript技巧

slice() 定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置.第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置. 1.传递参数为正值情况: var str ="helloWorld"; // 一个参数,则将字符串长度作为结束位置 alert(str.slice(3)); // "loWorld" // 两个参数,7位置上的字符为"r",但不包括结束位置的字符 ale

php mb_strwidth函数实现中英文混排字符串截取

mb_strwidth($str, $encoding) 返回字符串的宽度 $str 要计算的字符串 $encoding 要使用的编码,如 utf8.gbk mb_strimwidth($str, $start, $width, $tail, $encoding) 按宽度截取字符串 $str 要截取的字符串 $start 从哪个位置开始截取,默认是0 $width 要截取的宽度 $tail 追加到截取字符串后边的字符串,常用的是 ... $encoding 要使用的编码  代码如下 复制代码 <

PHP函数篇之掌握ord()与chr()函数应用_php技巧

中文字符编码研究系列第三期,PHP函数篇掌握ord()与 chr()函数应用,上期[PHP基础篇详解ASCII码对照表与字符转换]一文中了解了ASCII码和字符转换的方法,但使用时发现在字符转换之间需要两个特殊的函数,用于字符与十进制之间的转换,ord()函数把字符转换为十进制数字,chr()函数把十进制数字转化为字符,在二进制,八进制,十进制与十六进制之间充当桥梁的作用. 一,ord()函数的应用 ord()函数用于返回一个字符的ASCII值,最基本的用法如获取a 的ASCII值ord('a'

在主函数中输入一个字符串str1,调用函数。

问题描述 在主函数中输入一个字符串str1,调用函数. 在主函数中输入一个字符串str1,调用函数chage(str1,N);将str1 中的小标为奇数的字符取出构成一个新的字符串放入字符串str2中.然后在主函数中输出字符串str2.运用到数组的引用. #include #define N 10 using namespace std; void chage(char str2[],int n); int main() { char str1[N]; for(int i=0;i cin>>s

c-这个函数什么意思啊,第一个函数为什么都是赋值给UUT_date[0],后面加&amp;amp;#39;0&amp;amp;#39;又是什么意思

问题描述 这个函数什么意思啊,第一个函数为什么都是赋值给UUT_date[0],后面加'0'又是什么意思 void HEXtoarry(ulong ReadVlaue) { UUT_date[0]=ReadVlaue/100000000%10+'0'; UUT_date[0]=ReadVlaue/10000000%10+'0'; UUT_date[0]=ReadVlaue/1000000%10+'0'; UUT_date[0]=ReadVlaue/100000%10+'0'; UUT_date[

详解C语言gets()函数与它的替代者fgets()函数_C 语言

 在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回.如果要读取一行字符串,比如: I love BIT 这种情况,scanf()就无能为力了.这时我们最先想到的是用gets()读取. gets()函数从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回.gets()函数并不读取换行符'\n',它会吧换行符替换成空字符'\0',作为c语言字符串结束的标志. gets()函数经常和puts()函数配对使用,put

link中是不是只能调用sqlfunctions中的函数?能不能给sqlfunctions增加函数?

问题描述 link中是不是只能调用sqlfunctions中的函数?能不能给sqlfunctions增加函数? link中是不是只能调用sqlfunctions中的函数?能不能给sqlfunctions增加函数? 解决方案 可以调用自定义函数,不过前提是函数要在sql里面实现 参考:http://www.cnblogs.com/lyj/archive/2008/03/19/1112356.html 否则只能先用AsEnumerable转换成Linq to Objects,再执行.