当前位置: 代码迷 >> PHP >> ThinkPHP中截断指定长度的中文字符串后用删节号代替
  详细解决方案

ThinkPHP中截断指定长度的中文字符串后用删节号代替

热度:88   发布时间:2016-04-28 22:10:05.0
ThinkPHP中截断指定长度的中文字符串后用省略号代替

在TP模板中获取字符串并截断,以前一直觉得很神奇,现在才知道是自己不懂。

开始不是很了解模板中可以直接调用方法,以为$this->assign('content',$res);指派后只能在模板中这样接受{$content},于是写各种原生PHP语句无效

<php>$title = {$content['title']}</php>

后来高手指点才知道在标签<php></php>中不需要{}也就是

//显示效果


参考文章:点击打开链接

<php>$title = $content['title']</php>
于是终于拨开乌云见日开了
//放在Common文件夹下common.php中的获取中文字符串的方法
function abslength($str){          $len=strlen($str);          $i=0; $j=0;         while($i<$len)          {                if(preg_match("/^[".chr(0xa1)."-".chr(0xf9)."]+$/",$str[$i]))                {                  $i+=3;  //注意TP中的编码都是utf-8,所以+3;如果是GBK改为+2               }                 else                {                  $i+=1;                }             $j++;       }       return $j;   } 

//模板中的部分代码

<table>          <tbody>                <volist name="article" id="content">                    <tr class="">			<!--鼠标移动上去显示截断前的字符串,太简单了哦-->                      <td title="{$content['title']}" style="cursor:pointer;"><li><a href="{:U('Home/Info/detail?id='.$content['id'])}"><strong>                          <php>                            echo substr('abc',0,2).'...';   <!--测试语句,如果全是非中文,这条语句就能搞定-->                            $title = $content['title'];                            $length = abslength($title);                            if ($length>6) {                          </php>                              {$content['title'] | String::msubstr=0,5,'utf-8',true}  //参考的是底部的连接                          <php>                            } else {                              echo $content['title'];                            }                          </php>                        </strong></a></li></td>                        <td class="center">{$content['time']}</td>                    </tr>                </volist>            </tbody></table>