广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 5292 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
笑笑 会员卡 葫芦墩家族
个人文章 个人相簿 个人日记 个人地图
发文大师奖
头衔:    
风云人物
级别: 风云人物 该用户目前不上站
推文 x137 鲜花 x523
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[PHP][教学] PHP UTF-8 截字、断字专用 function
在写网页的时后常会遇到 80 个字要截字, 然后超过 80 字加 "...", 未满 80 字不加.. 等等之类的问题.

之前用 mb_substr 的写法如下:

复制程式
$string = strip_tags($string); // 先清掉 html tag, 以免 html tag 被破坏
$string = mb_substr($string, 0, 80, 'UTF-8');
$string .= (mb_strlen($string, 'UTF-8') > 80)?'...':''
PHP 有支援很方便的 function 可以直接达到此功能.

复制程式
$string = strip_tags($string);
$string = mb_strimwidth($string, 0, 80, '...', 'UTF-8');
在 UTF-8 的环境算字数用 strlen 或 mb_strlen 都不是很准, 所以可以用另一个做法, 算字的宽度, 也是个不错的做法

复制程式
echo mb_strwidth($string, 'UTF-8'); // 算字宽度

mb_strlen 跟 mb_strwidth 有什么不同呢?

复制程式
echo mb_strwidth("数位男女", 'UTF8').'<br>'
echo mb_strlen("数位男女", 'UTF8').'<br>'
你会看到

8
4

所以如果你是要显示在网页上,那就用 mb_strwidth 会比较准,因为一个中文字的宽度等于两个英文字的宽度

如果你要写入 MySQL ,那就要用 mb_strlen 比较准,因为 MySQL 4.1.x 以后,资料的内码都是用 UTF-8 ,而栏位宽度也是用 UTF-8 去算的


[ 此文章被笑笑在2008-06-12 12:23重新编辑 ]



每天大笑三声,可以让你更长寿哦...^^
献花 x0 回到顶端 [楼 主] From:台湾新世纪资通股份有限公司 | Posted:2008-06-12 11:46 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.054811 second(s),query:15 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言