rinald_未来往事

html无损截取_保留html标签

PHP
  1. /**
  2. * 字符串切割
  3. * 功能:截取字符串(支持中文),如果字符串中包括html标签,截取的字符串则会保留完整的html标签
  4. * @param string $string 输入字符串
  5. * @param unknown $length 截取长度
  6. * @param bool $mode 截取模式:0删去html标记(默认),1补齐html标记
  7. * @param string $replace
  8. * @return string
  9. * @author 未来往事<http://blog.fity.cn>
  10. * 说明:
  11. * 1.未考虑多字节字符,仅已字节做计数单位
  12. * 2.未考虑可单独存在的标记
  13. */
  14. function html_substr($string, $length, $mode=0, $omit = '......') {
  15. //先截取指定长度的字符串开始--临时添加
  16. if (strlen ( $string ) < $length) {
  17. // $string = substr ( $string, 0 );
  18. $string = mb_substr($string,0,'',"utf-8");
  19. } else {
  20. // $string = substr ( $string, 0, $length );
  21. $string = mb_substr($string,0,$length,"utf-8");
  22. }
  23. //先截取指定长度的字符串结束
  24. // var_dump($string);die;
  25. $str= preg_split('/(<\!--.*-->|<[^>]*>)/s', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
  26. foreach($str AS $k => $v) {
  27. if($v{0} != '<') {
  28. $length = $length - strlen($v);
  29. if($length < 0) $str[$k] = mb_substr($v, 0, $length, "utf-8");
  30. }else{
  31. $str[$k] = strtolower($v);
  32. }
  33. if($length <= 0){
  34. break;
  35. }
  36. }
  37. //var_dump($str);die;
  38. $str = array_slice($str, 0, $k+1);
  39. $length = count($str);
  40. foreach($str as $k=>$v) {
  41. if($v{0} == '<' && $v[1] != '/') {
  42. $ch = str_replace('<', '</', $v);
  43. for($i=$k+1; $i<$length && $str[$i]!=$ch; $i++);
  44. if($i == $length){
  45. if($mode){
  46. if($str[$length] == '</br/>'){
  47. $str[$length] = '';
  48. }
  49. if($ch == '</br/>'){
  50. $ch = '';
  51. }
  52. $str[$length] = $ch . $str[$length];
  53. }else{
  54. $str[$k] = '';
  55. }
  56. }
  57. }
  58. }
  59. //var_dump($str);die;
  60. $str = join('', $str).$omit;
  61. return $str;
  62. }
原文作者:rinald
原文地址:http://fity.cn/post/631.html
互联网技术更新较快,本站很多文章具有实效性,我会及时更新原文,但转载的文章无法通知更新。为了不给读者造成困惑或误导,请您在转载时保留此出处信息,尊重别人也是尊重自己。

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。