<?php
function trimChinese($str,$len)
{
$r_str='';
$i=0;
while ($i<$len){
$ch=substr($str,$i,1);
if(ord($ch)>0x80) $i++;
$i++;
}
$r_str=substr($str,0,$i);
if (strlen($str) > $len)
$r_str .= "...";
return $r_str;
}
$str = "比如要求长度为个长度长度长度长度";
echo trimChinese($str,30);
?>
function trimChinese($str,$len)
{
$r_str='';
$i=0;
while ($i<$len){
$ch=substr($str,$i,1);
if(ord($ch)>0x80) $i++;
$i++;
}
$r_str=substr($str,0,$i);
if (strlen($str) > $len)
$r_str .= "...";
return $r_str;
}
$str = "比如要求长度为个长度长度长度长度";
echo trimChinese($str,30);
?>
解决方案 »
- 求xss绕开htmlspecialchars过滤原理
- 如何判断一组数据在一个信息里出现多少次
- 如何使用mysql里的函数
- 正则表达式匹配问题
- 一个正则匹配内容的一个问题!!
- ***请问现在的mysql到底支持子选择吗???????***
- 就PHP简单网站预算外包
- http://www.slide.com/arrange 看看它的flash合成怎么实现的 能用php实现么?还是flash编程,请给个详细的解释,谢谢
- 在FCKedeitor中加功能
- 发一个可以通过HTTP协议上传文件的类
- 如何实现菜单的折叠和伸展?
- 怎么点击一个链接文字(add)后.链接文字变为(ok).然后(OK是普通文本.不是链接文本)
可以贴出来看看吗,上面的函数,在字符不够时,不会补齐,对不齐不太好看。
function trimChinese($str,$len)
{
$r_str='';
$i=0;
while ($i<$len){
$ch=substr($str,$i,1);
if(ord($ch)>0x80) $i++;
$i++;
}
$r_str=substr($str,0,$i);
if (strlen($str) > $len)
$r_str .= "...";
//用'_'来补齐
return str_pad($r_str,$len+3,'_');
}
$str = "比如要求长度长度长a度";
echo trimChinese($str,30);
$str = "aaa";
echo "<br>";
echo trimChinese($str,30);
echo "<br>";
$str = "比如要求长度为个长度长度长度长度长度长";
echo trimChinese($str,30);
echo "<br>";
?>
如果是用空格来补的话,就要以 来替换"_"(可以是用其他少见字符)
$len应该+4才对。
<?php
function trimChinese($str,$len)
{
$r_str='';
$i=0;
while ($i<$len){
$ch=substr($str,$i,1);
if(ord($ch)>0x80) $i++;
$i++;
}
$r_str=substr($str,0,$i);
if (strlen($str) > $len)
$r_str .= "...";
//用'_'来补齐,然后以" "来代替.
return str_replace("_"," ",str_pad($r_str,$len+4,'_'));
}
$str = "比如要求长度长度长a度";
echo trimChinese($str,30);
$str = "比如";
echo "<br>";
echo trimChinese($str,30);
echo "<br>";
$str = "比如要求长aaa度为个长度长度长度长度长度长";
echo trimChinese($str,30);
echo "<br>";
?>
这里面我写了一个,对于中文英文混排是没有问题的,经过了很多测试的