截取字符串的首尾字 中间用省略号代替

”<a target="_blank" href="shop.php?uid=<{$list.userid}>"><{$list.user}></a>“
上句话里面的<{$list.user}>代表用户名称,想截取这个名称,只显示首尾的字或者字母,中间用“*” 代替,求一个带解释的,急求!!!

  一、这是为了解决网站制作过程中标题过长的问题采用的一种处理办法。
  二、具体过程以及方法如下:
  1、先导性解释:
  在制作网站的过程中,列表显示新闻标题或产品标题时会出现字符串过长,导致页面布局错乱。如何解决这个问题呢,当然可以用程序截取多余字符的方法,这里介绍一种用CSS样式来实现的方法,因为这样文字在页面还是实际存在,只是没有显示出来,所以对SEO优化也有好处。
  2、注意事项以及操作方式:
  首先要定宽和高,然后使用样式如:
  .cuttitle{ display: block; width: 220px; height:24px; overflow: hidden; white-space: nowrap; -o-text-overflow: ellipsis; text-overflow: ellipsis; }
< ul><li class='cuttitle'>截取多余字符<li></lu> 这样当标题超过长度时就会自动截取。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-01-04
/**
* Reduce a string by the middle, keeps whole words together
*
* @param string $string
* @param int $max (default 50)
* @param string $replacement (default [...])
* @return string
* @author david at ethinkn dot com
* @author loic at xhtml dot ne
* @author arne dot hartherz at gmx dot net
*/
function strMiddleReduceWordSensitive($string,$max=50,$rep='[...]'){
$strlen = strlen($string);
if ($strlen <= $max)
return $string;
$lengthtokeep = $max - strlen($rep);
$start = 0;
$end = 0;
if (($lengthtokeep % 2) == 0) {
$start = $lengthtokeep / 2;
$end = $start;
} else {
$start = intval($lengthtokeep / 2);
$end = $start + 1;
}
$i = $start;
$tmp_string = $string;
while ($i < $strlen) {
if (isset($tmp_string[$i]) and $tmp_string[$i] == ' ') {
$tmp_string = substr($tmp_string, 0, $i) . $rep;
$return = $tmp_string;
}
$i++;
}
$i = $end;
$tmp_string = strrev ($string);
while ($i < $strlen) {
if (isset($tmp_string[$i]) and $tmp_string[$i] == ' ') {
$tmp_string = substr($tmp_string, 0, $i);
$return .= strrev ($tmp_string);
}
$i++;
}
return $return;
return substr($string, 0, $start).$rep.substr($string, - $end);
}

演示范例:
?
1
2
3
4
5
6

// example:
$text = 'This is a very long test sentence, bla foo bar nothing';
print strMiddleReduceWordSensitive ($text, 30) . "\n";
// Returns: This is a very[...]foo bar nothing (~ 30 chrs)
print strMiddleReduceWordSensitive ($text, 30, '...') . "\n";
// Returns: This is a very...foo bar nothing (~ 30 chrs)追问

你能解释一下都是什么意思吗?我这看的很迷惑,为什么要那么多的代码。

追答

function strMiddleReduceWordSensitive($string,$max=50,$rep='[...]'){
$strlen = strlen($string);
if ($strlen <= $max)
return $string;
//确定最终长度
$lengthtokeep = $max - strlen($rep);
$start = 0;
$end = 0;
//确定省略部分的起始位置
if (($lengthtokeep % 2) == 0) {
$start = $lengthtokeep / 2;
$end = $start;
} else {
$start = intval($lengthtokeep / 2);
$end = $start + 1;
}
//要省略部分开始到整串结束做替换
$i = $start;
$tmp_string = $string;
while ($i < $strlen) {
if (isset($tmp_string[$i]) and $tmp_string[$i] == ' ') {
$tmp_string = substr($tmp_string, 0, $i) . $rep;
$return = $tmp_string;
}
$i++;
}

//要省略部分结束到整串结束做还原
$i = $end;
$tmp_string = strrev ($string);
while ($i < $strlen) {
if (isset($tmp_string[$i]) and $tmp_string[$i] == ' ') {
$tmp_string = substr($tmp_string, 0, $i);
$return .= strrev ($tmp_string);
}
$i++;
}
return $return;
//简易方案: return substr($string, 0, $start).$rep.substr($string, - $end);
}

本回答被提问者和网友采纳
第2个回答  2015-10-15
=left(A1,1)&"..."&right(A1,1)