Home >php教程 >php手册 >php substr()函数截取中文字符串乱码

php substr()函数截取中文字符串乱码

WBOY
WBOYOriginal
2016-05-25 16:49:511468browse

在php中如果我要用substr()截取字符串全英文的没问题,如果包括有中文或英文就会悲剧了,但大家也 别切我们可以使用其它办法来解决.

php截取中文字符串出现乱码,这是最近发现的事情,先前我曾经写过一篇关于自动生成meta信息的文章,那篇关于利用php截取文章前多少字作为description方法,但是出现了IE6无法加载CSS的现象,这里做一个补充。

首先要明确这么一个问题,之所以会出现IE6偶尔无法加载CSS的现象,是因为文件出现了乱码,导致后面的加载CSS的link无法被IE6正确解析,因此就看到了一个纯HTML页面,没有CSS,赤裸裸!

明确了问题,剩下的问题就好解决了,就是防止乱码,既然万戈所提供的函数出现了乱码,就重新去找了一个php函数来解决这个乱码的问题。

substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题。

mb_substr()这个函数的用法与substr()相似,只是在最后要加入多一个参数,以设定字符串的编码,通过这里大几就应该理解我改进万戈方法的原因了~~下面再介绍几个更高级处理办法

例1代码如下:

<?php
function func_chgtitle($str, $len) { //$length我们允许字符串显示的最大长度
    $tmpstr = "";
    $strlen = $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;
}
?>

例2字符串编码为UTF-8的,一个中文字符占三个字节:

<?php
public static function chinesesubstr($str, $start, $len) { // $str指字符串,$start指字符串的起始位置,$len指字符串长度
    $strlen = $start + $len; // 用$strlen存储字符串的总长度,即从字符串的起始位置到字符串的总长度
    for ($i = $start; $i < $strlen;) {
        if (ord(substr($str, $i, 1)) > 0xa0) { // 如果字符串中首个字节的ASCII序数值大于0xa0,则表示汉字
            $tmpstr.= substr($str, $i, 3); // 每次取出三位字符赋给变量$tmpstr,即等于一个汉字
            $i = $i + 3; // 变量自加3
            
        } else {
            $tmpstr.= substr($str, $i, 1); // 如果不是汉字,则每次取出一位字符赋给变量$tmpstr
            $i++;
        }
    }
    return $tmpstr; // 返回字符串
    
}
?>

               
               

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn