php substr中文乱码最有效到解决办法(2009-07-29 12:29:38)

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

【本文转自独占神林的日志;链接:

标签:php substr 中文乱码 网站开发 it

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

在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在UTF-8编码当中,一个中文可能占有2个或3个字节,英文或半角标点占1字节。

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

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

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

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

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

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

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

=============================

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是按字节来切分字符,但是都不会产生半个字符的现象。

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

=============================

=============================

=============================

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实现中文字串截取无乱码的方法

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是按字节来切分字符,但是都不会产生半个字符的现象。

=============================

function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
   $str=null;
   $len=$start+$length;
   for($i=$start;$i<$len;$i++){
    if(ord(substr($string,$i,1))>0xa0){
     $str.=substr($string,$i,2);
     $i++;
    }else{
     $str.=substr($string,$i,1);
    }
   }
   return $str.’…’;
}else{
   return $string;
}
}

=============================

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

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

function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.’…’;
}else{
return $string;
}
}

function GBsubstr($string, $start, $length) {
if(strlen>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.’…’;
}else{
return $string;
}
必发娱乐官方网站,}【实现中文字串截取无乱码的方法–适用于utf-8】function
substr_text($str, $start=0, $length, $charset=”utf-8″,
$suffix=””){if(function_exists(“mb_substr”)){return mb_substr($str,
$start, $length,
$charset).$suffix;}elseif(function_exists(‘iconv_substr’)){return
iconv_substr($str,$start,$length,$charset).$suffix;}$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));return
$slice.$suffix;}【本文转自独占神林的日志;链接:

==========================================================

strpos(‘大家好’,’家’) 返回是3

改用mb_strpos 用法.

mb_strpos

(PHP 4 >= 4.0.6)

mb_strpos — Find position of first occurrence of string in a string

Description

int mb_strpos ( string haystack, string needle [, int offset [,
string encoding]])

mb_strpos() returns the numeric position of the first occurrence of
needle in the haystack string. If needle is not found, it returns
FALSE.

mb_strpos() performs multi-byte safe strpos() operation based
on number of characters. needle position is counted from the beginning
of the haystack. First character’s position is 0. Second character
position is 1, and so on.

If encoding is omitted, internal character encoding is used.
mb_strrpos() accepts string for needle where strrpos()
accepts only character.

offset is search offset. If it is not specified, 0 is used.

encoding is character encoding name. If it is omitted, internal
character encoding is used.

See also mb_strpos(), mb_internal_encoding(), strpos()


Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注