为一个莫名其妙的问题已经折腾2天了,项目时间紧张,快崩溃了,求救啊~最开始代码如下:
function utf8Substr($str, $len, $from=0 , $dot='..')
{
$strNew = preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                       '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                       '$1',$str); 
return ($str!=$strNew)?$strNew.$dot:$str;
}
可返回被截取的中英文字符串
参数为原字符串、要截取的长度、起始长度、当字符串截取后后面要增加的字符
后经过测试,发现不能成功截图带有HTML的字符串后修改如下:
function utf8Substr($str, $len, $from=0 , $dot='..')
{
$str    = strip_tags($str);
$strNew = preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                       '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                       '$1',$str); 
return ($str!=$strNew)?$strNew.$dot:$str;
}
这个函数基本都能正常工作了,但最近发现一个问题,就是用ewebeditor编辑后存入数据库的内容,带有链接的就不能成功截取了,查看了一下,编辑器把链接都写为:<A href="*"></A>这样,怀疑是strip_tags没处理干净,所有就又写了一行$str = str_replace('<A','<a',$str); $str = str_replace('</A','</a',$str);
结果发现转出来,链接的样式还是大写。现在问题2个,1:为什么没转为大写字符串?2、为什么带有超链这个函数就把所有内容都显示出来了,根本没有截取

解决方案 »

  1.   

    echo strip_tags('<A href="*">xxx</A>'); //xxx
      并不存在 strip_tags没处理干净
      

  2.   

    问题已解决,搞了半天,是因为有一个鼠标悬停时显示部分内容的处理程序有BUG,处理一下好了
      

  3.   

    <style type="text/css">
    a.info {position:relative; z-index:0; text-decoration:none;font-size:9pt;line-height:23px; }
    a.info:hover {z-index:1; }
    a.info span {display: none }
    a.info:hover span {display:block;position:absolute;top:50px;left:60px;width:200px;border:2px solid #cccccc; background:#f8f8f8; color:#333;padding:5px;text-align:left; }
    .myBtn {background-color:#efefef; border:#666 solid 1px; padding-left:8px;padding-right:7px;}
    </style><a class="info" href="<?=$urlView?>"
               target="<?=($ctrl=='content_list')?'main':'_self'?>"><?=utf8Substr($contView,$maxLen-1)?>
              <span><?=strip_tags($contView)?></span></a>现在加入了<?=strip_tags($contView)?>就可以了,之前直接用的$contView,带有链接就直接显示了出来,不带链接时效果正常