截取子字符串 php,PHP截取子字符串

今天项目要把详情页的title、keywords、description根据现实的内容修改一下,其中对description提了一个要求,要截取正文内容的前74个字符。

这很简单啊

$description =substr($info['content'], 0, 74);

但是测试后发现显示出一大堆HTML标签,看着很凌乱。于是查找一下有没有去除字符串中的HTML标签的函数,刚好有strip_tags()。定义如下:

strip_tags(string,allow)** 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。

注释:该函数始终会剥离 HTML 注释。这点无法通过 allow 参数改变。

注释:该函数是二进制安全的。

string

必需。规定要检查的字符串。

allow

可选。规定允许的标签。这些标签不会被删除。

于是我把截取字符串的代码改成下面的代码。

$description =substr(strip_tags($info['content']), 0, 74);

然而测试以后发现截取的字符根本没有74个啊,而且还有乱码。再次搜索发现substr只适合截取英文字符,要截取中文可以使用mb_substr($str, $start, $length, $encoding)。于是我的代码变成下面的样子。

$description =mb_substr(strip_tags($info['content']), 0, 74, 'utf-8');

Bingo!这次总算不出错了!

那来详细看看mb_substr这个函数吧。

字符串只要出现中文字符,就有可能导致PHP substr中文乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位数不准确,substr()硬生生地将一个中文字符“锯”成两半,造成断开的字符会把其后的字符拉过来一起做一个字,所以出现了PHP substr中文乱码。

而mbstring扩展库就解决了这个问题。但它在php中是默认不被支持的,我们需要在php目录下找到php.ini打开编辑,搜索mbstring.dll,找到;extension=php_mbstring.dll。把前面的;号去掉才可以使用mb_substr函数哦。mbstring扩展库中还有mb_strcut()也可以用来截取中文字符串。那它和mb_substr()有何不同呢?

看一个例子:

输出“这样一来我的字”共7个汉字。

输出“这样一”三个汉字。

从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象……

echo mb_substr('飞花院博客feihuayuan',0,9);

//返回: 飞花院

echo mb_substr('飞花院博客feihuayuan',0,9,'utf-8');

//则返回: 飞花院博客feih

mb_strcut('飞花院博客feihuayuan',0,9,'utf-8');

//则返回:飞花院

?>

从上面实例可以看得出来,substr只支持单字节的,这样只适合英文截取,而mb_substr函数是双字体截取了,正好可用于中文了,而mb_strcut是三字节了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值