php中文字符串截取方法防止乱码解析

用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半。

解决办法:

1、使用mbstring扩展库的mb_substr截取就不会出现乱码了。

2、自己书写截取函数,但效率不如用mbstring扩展库来得高。

3、如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0)。

substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr()/mb_strcut的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符串的编码,但是一般的服务器都没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll打开。

举个例子:

 代码如下 复制代码
<?php
echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>

输出:这样一来我的字

 代码如下 复制代码
<?php
echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>

输出:这样一

mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。

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

 代码如下 复制代码
<?php
//此函数完成带汉字的字符串取串
function substr_CN($str,$mylen){
$len=strlen($str);
$content='';
$count=0;
for($i=0;$i<$len;$i++){
if(ord(substr($str,$i,1))>127){
$content.=substr($str,$i,2);
$i++; // www.jbxue.com
}else{
$content.=substr($str,$i,1);
}
if(++$count==$mylen){
break;
}
}
echo $content;
}

$str="34中华人民共和国56";
substr_CN($str,3);//输出34中
?>

时间: 2024-10-27 08:21:54

php中文字符串截取方法防止乱码解析的相关文章

php中文字符串截取方法实例总结_php技巧

本文实例总结了php中文字符串截取方法,非常实用的技巧.分享给大家供大家参考.具体方法分析如下: 用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符"锯"成两半. 解决办法如下: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. 2.自己书写截取函数,但效率不如用mbstring扩展库来得高. 3.如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0). substr()函数

php中ord实现中文字符串截取并解决乱码问题

   代码如下 复制代码 <?php //a字符 $str=(pack("a*", "中国")); echo $str,"=",strlen($str),"字节n"; getascill($str); //h字符 $str=(pack("h*", "fffe")); echo $str,"=",strlen($str),"字节n"; geta

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

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

Python实现简单截取中文字符串的方法

 本文实例讲述了Python实现简单截取中文字符串的方法.分享给大家供大家参考.具体如下: web应用难免会截取字符串的需求,Python中截取英文很容易: ? 1 2 3 >>> s = 'abce' >>> s[0:3] 'abc' 但是截取utf-8的中文机会截取一半导致一些不是乱码的乱码.其实utf8截取很简单,这里记下来作为备忘 ? 1 2 3 4 #-*- coding:utf8 -*- s = u'中文截取' s.decode('utf8')[0:3].e

php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例_php技巧

本文实例讲述了php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8用法.分享给大家供大家参考,具体如下: /* *gb2312中文字符串截取 */ function substr_for_gb2312($str,$start,$len=null) { $totlelength = strlen($str); //特例情况 if ($len == null) $len = $totlelength; if ($len ==0) return ""

php 中文字符串截取函数

<? //php教程 中文字符串截取函数 /* */  代码如下 复制代码 function substr($str = '', $offset = 0, $len = 0){     $len || ($len = strlen($str));     preg_match_all('/./us', $str, $result);     return implode('', array_slice($result[0], $offset, $len)); } //方法二  代码如下 复制代码

php中支持多种编码的中文字符串截取函数!_php技巧

支持多种编码的中文字符串截取函数!   复制代码 代码如下: /*     * @todo 中文截取,支持gb2312,gbk,utf-8,big5      *     * @param string $str 要截取的字串     * @param int $start 截取起始位置     * @param int $length 截取长度     * @param string $charset utf-8|gb2312|gbk|big5 编码      * @param $suffix

php中文字符串截取乱码问题解决方法

字符串编码为GB2312的,一个中文字符占两个字节:  代码如下 复制代码 public static function chinesesubstr($str, $start, $len) { // $str指字符串,$start指字符串的起始位置,$len指字符串长度         $strlen = $start + $len; // 用$strlen存储字符串的总长度,即从字符串的起始位置到字符串的总长度         for($i = $start; $i < $strlen;) {

php中文字符串截取多种方法汇总_php技巧

1. 截取GB2312中文字符串 <?php < ?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++; } el