php实现中文字串截取无乱码的方法

例1

 代码如下 复制代码

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);
        $slice = join("",array_slice($match[0], $start, $length));
        if($suffix) return $slice."…";
        return $slice;
    }

例2

 代码如下 复制代码

<?php
//$start:指定开始截取字符串的位置;$length指定截取字符的长度
function substr2($string, $start, $length)
{
$len = strlen($string);
if($len > $length)
{
   $str = '';
   $len1 = $start + $length; //截取到原字符串的位置
   for($i=$start; $i<$len1; $i++)
   {
    if(ord(substr($string, $i, 2)) > 0xa0) //在ASCII中,0xa0表示汉字的开始
    {
     $str.=substr($string, $i, 2);
     $i++;
    }
    else
    {
     $str.=substr($string, $i, 1);
    }
   }
   return $str.'...';
}
else
{
   return $string;
}
}

?>

再补充个简单的,思路相同(2010-5-31)

 代码如下 复制代码

<?php
function chinesesubstr($str, $start, $len){
   $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;
}
$str = "waiting for you 等wait你back";
echo chinesesubstr($str, 0, 19)
?>

时间: 2024-10-26 16:27:33

php实现中文字串截取无乱码的方法的相关文章

php中文字串截取无乱码的方法

substr截取 substr() 函数返回字符串的一部分.    代码如下 复制代码 <?php  $rest = substr("我是中国人", -1);    // returns "乱码"  echo $rest.'<br />';  $rest = substr("abcdef", -2);    // returns "ef"  echo $rest.'<br />';  $rest

php mb_substr实现中文字符串截取无乱码的方法

注意:在windows目录下找到php.ini打开编辑,搜索mbstring.dll,找到 ;extension=php_mbstring.dll把前面的;号去掉,这样mb_substr函数就可以生效了 例子  代码如下 复制代码 <?php $str = '这样一来我的字符串就不会有乱码^_^'; echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8'); //结果:这样一来我的字 echo "<br>"

PHP 中文字符串截取无乱码的方法以及php汉字截取函数

昨天,在写代码时我遇到了一个中文字符串截取的问题,原本是想直接用substr()来,但这个是在单字节符下用的,对于多字节编码的汉字或是其它语言字符中,这个函数可能就用不上了,而且会容易截出乱码来!       现在就把我的下工作记录和总结给大家分享一下: 问题产生及使用案例网站:天气预报15天查询(http://tqybw.net) 问题时间:2013-10-31       解决思路:把汉字按一个汉字在编码下按其在完整性正则分割成数组,再根据需要取截取长度:       1.实现方法函数  

去掉Word文档中表格中文字但仍保留表格的方法

  去掉Word文档中表格中文字但仍保留表格的方法          对于要求Word删除表格保留文字的情况,只需把表格设置为没有边框就可以实现;对于要求去掉word文字保留表格的情况,可以全选表格,然后按 delete 键,这样只删除文字不册除表格. 一.Word删除表格保留内容的方法 具体请参考:http://www.officezhushou.com/word/jiqiao/2819.html 二.去掉Word文字保留表格的方法 去掉Word文字保留表格的方法一: 1.全选表格,按 Del

vc6.0:中文字串的读取

#include #include #include #include using namespace std; int main(){ locale china("chs"); wcin.imbue(china); //use locale object wcout.imbue(china); wstring title; wchar_t wc = L'.'; while(getline(wcin, title, wc)){ size_t len = title.length();

dojo传递中文字串时的问题

         今天在Fixing Bug的过程中,发现了一个使用dojo的问题.当输入CJK字符时提交到后台发现就变成了"策"的形式,虽然有时在显示的时候并不会出错的,但是在某些时候放到超链接里或者经过几次前后传递之后就不能正常显示中文了,会直接显示成"策".        问题原因:dojo对CJK字符进行了编码,而默认的编码是ascii.所以要想还原字串本来的面貌,就要自己指定合适的编码格式.        解决方法:找到提交数据的方法:dojo.io.bi

PHP中文字符串截断无乱码解决方法_php技巧

一个比较好用的字符串截取函数: function substring($str, $start, $length){ //比较好用字符串截取函数 $len = $length; if($length < 0){ $str = strrev($str); $len = -$length; } $len= ($len < strlen($str)) ? $len : strlen($str); $tmpstr = ""; for ($i= $start; $i < $le

PHP截取汉字乱码问题解决方法之mb_substr函数的应用

本文转自IT摆渡网欢迎转载,请标明出处 更多php文章请阅读 php问题错误修改 首先 1.确保你的Windows/system32下有php_mbstring.dll这个文件,没有就从你Php安装目录extensions里拷入Windows/system32里面. 2.在windows目录下找到php.ini打开编辑,搜索mbstring.dll,找到 ;extension=php_mbstring.dll把前面的;号去掉,这样mb_substr函数就可以生效了 mb_strcut函数功能也可

java中Filter过滤器处理中文乱码的方法_java

注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处理乱码的格式不一致.所以编译出错. 解决方法:所有地方都用utf-8或gbk 复制代码 代码如下: //过滤器类CharactorFilter.jsppackage cn.com.Filter; import java.io.IOException; import javax.servlet.Fil