php截取字符串,避免乱码

  1. <?php  
  2. //截取中文字符串  
  3. function mysubstr($str$start$len) {  
  4. $tmpstr = "";  
  5. $strlen = $start + $len;  
  6. for($i = 0; $i < $strlen$i++) {  
  7. if(ord(substr($str$i, 1)) > 0xa0) {  
  8. $tmpstr .= substr($str$i, 2);  
  9. $i++;  
  10. else  
  11. $tmpstr .= substr($str$i, 1);  
  12. }  
  13. return $tmpstr;  
  14. }  
  15. ?>  
  16.   
  17. 2. 截取utf8编码的多字节字符串  
  18.   
  19. <?php  
  20. //截取utf8字符串  
  21. function utf8Substr($str$from$len)  
  22. {  
  23. return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.  
  24. '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',  
  25. '$1',$str);  
  26. }  
  27. ?>  
  28.   
  29. 3. UTF-8、GB2312都支持的汉字截取函数  
  30. <?php  
  31. /* 
  32. Utf-8、gb2312都支持的汉字截取函数 
  33. cut_str(字符串, 截取长度, 开始长度, 编码); 
  34. 编码默认为 utf-8 
  35. 开始长度默认为 0 
  36. */  
  37.   
  38. function cut_str($string$sublen$start = 0, $code = 'UTF-8')  
  39. {  
  40. if($code == 'UTF-8')  
  41. {  
  42. $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";  
  43. preg_match_all($pa$string$t_string);  
  44.   
  45. if(count($t_string[0]) - $start > $sublenreturn join(''array_slice($t_string[0], $start$sublen))."...";  
  46. return join(''array_slice($t_string[0], $start$sublen));  
  47. }  
  48. else  
  49. {  
  50. $start = $start*2;  
  51. $sublen = $sublen*2;  
  52. $strlen = strlen($string);  
  53. $tmpstr = '';  
  54.   
  55. for($i=0; $i<$strlen$i++)  
  56. {  
  57. if($i>=$start && $i<($start+$sublen))  
  58. {  
  59. if(ord(substr($string$i, 1))>129)  
  60. {  
  61. $tmpstr.= substr($string$i, 2);  
  62. }  
  63. else  
  64. {  
  65. $tmpstr.= substr($string$i, 1);  
  66. }  
  67. }  
  68. if(ord(substr($string$i, 1))>129) $i++;  
  69. }  
  70. if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";  
  71. return $tmpstr;  
  72. }  
  73. }  
  74.   
  75. $str = "abcd需要截取的字符串";  
  76. echo cut_str($str, 8, 0, 'gb2312');  
  77. ?>  
  78.   
  79. 4. BugFree 的字符截取函数  
  80.   
  81. <?php  
  82. /** 
  83. * @package BugFree 
  84. * @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $ 
  85. * 
  86. * 
  87. * Return part of a string(Enhance the function substr()) 
  88. * 
  89. * @author Chunsheng Wang <wwccss@263.net> 
  90. * @param string $String the string to cut. 
  91. * @param int $Length the length of returned string. 
  92. * @param booble $Append whether append "...": false|true 
  93. * @return string the cutted string. 
  94. */  
  95. function sysSubStr($String,$Length,$Append = false)  
  96. {  
  97. if (strlen($String) <= $Length )  
  98. {  
  99. return $String;  
  100. }  
  101. else  
  102. {  
  103. $I = 0;  
  104. while ($I < $Length)  
  105. {  
  106. $StringTMP = substr($String,$I,1);  
  107. if ( ord($StringTMP) >=224 )  
  108. {  
  109. $StringTMP = substr($String,$I,3);  
  110. $I = $I + 3;  
  111. }  
  112. elseif( ord($StringTMP) >=192 )  
  113. {  
  114. $StringTMP = substr($String,$I,2);  
  115. $I = $I + 2;  
  116. }  
  117. else  
  118. {  
  119. $I = $I + 1;  
  120. }  
  121. $StringLast[] = $StringTMP;  
  122. }  
  123. $StringLast = implode("",$StringLast);  
  124. if($Append)  
  125. {  
  126. $StringLast .= "...";  
  127. }  
  128. return $StringLast;  
  129. }  
  130. }  
  131.   
  132. $String = "CodeBit.cn -- 简单、精彩、通用";  
  133. $Length = "18";  
  134. $Append = false;  
  135. echo sysSubStr($String,$Length,$Append);  
  136. ?>  
posted @ 2011-10-28 16:29  cashflow  阅读(625)  评论(0编辑  收藏  举报