知而不乎

面对现实 忠于理想

言有物而行有恒,思其难以图其易!

PHP截取字符串,支持UTF-8、GB2312、GBK多种字符集

知而不乎 历史存档 9 0 2010-08-01 11:49:00

PHP截取字符串,用函数截取字符串的专题,支持UTF-8、GB2312、GBK多种字符集。 
截取GB2312中文字符串 
<?php 
//截取中文字符串 
function mysubstr($str, $start, $len) { 
$tmpstr = ""; 
$strlen = $start + $len; 
for($i = 0; $i < $strlen; $i++) { 
if(ord(substr($str, $i, 1)) > 0xa0) { 
$tmpstr .= substr($str, $i, 2); 
$i++; 
} else 
$tmpstr .= substr($str, $i, 1); 

return $tmpstr; 

?> 

截取utf8编码的多字节字符串 
<?php 
//截取utf8字符串 
function utf8Substr($str, $from, $len) 

return preg_replace(#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,.$from.}. 
((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,.$len.}).*#s, 
$1,$str); 

?> 

UTF-8、GB2312都支持的汉字截取函数 
<?php 
/* 
Utf-8、gb2312都支持的汉字截取函数 
cut_str(字符串, 截取长度, 开始长度, 编码); 
编码默认为 utf-8 
开始长度默认为 0 
*/ 

function cut_str($string, $sublen, $start = 0, $code = UTF-8) 

if($code == UTF-8) 

$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]/"; 
preg_match_all($pa, $string, $t_string); 

if(count($t_string[0]) - $start > $sublen) return join(, array_slice($t_string[0], $start, $sublen))."..."; 
return join(, array_slice($t_string[0], $start, $sublen)); 

else 

$start = $start*2; 
$sublen = $sublen*2; 
$strlen = strlen($string); 
$tmpstr = ; 

for($i=0; $i< $strlen; $i++) 

if($i>=$start && $i< ($start+$sublen)) 

if(ord(substr($string, $i, 1))>129) 

$tmpstr.= substr($string, $i, 2); 

else 

$tmpstr.= substr($string, $i, 1); 


if(ord(substr($string, $i, 1))>129) $i++; 

if(strlen($tmpstr)< $strlen ) $tmpstr.= "..."; 
return $tmpstr; 



$str = "abcd需要截取的字符串"; 
echo cut_str($str, 8, 0, gb2312); 
?> 

PHP字符截取函数 
<?php 
function sysSubStr($String,$Length,$Append = false) 

if (strlen($String) < = $Length ) 

return $String; 

else 

$I = 0; 
while ($I < $Length) 

$StringTMP = substr($String,$I,1); 
if ( ord($StringTMP) >=224 ) 

$StringTMP = substr($String,$I,3); 
$I = $I + 3; 

elseif( ord($StringTMP) >=192 ) 

$StringTMP = substr($String,$I,2); 
$I = $I + 2; 

else 

$I = $I + 1; 

$StringLast[] = $StringTMP; 

$StringLast = implode("",$StringLast); 
if($Append) 

$StringLast .= "..."; 

return $StringLast; 



$String = " 简单、精彩、通用"; 
$Length = "18"; 
$Append = false; 
echo sysSubStr($String,$Length,$Append); 
?> 

 

收藏于 2010-08-01

来自于iteye博客

PHP 字符集 编码

网友评论 (0条)

联系作者

关于博客广告合作隐私保护更新历史

Copyright © 2011~2017 赵有财 版权所有 - 基于Tornado ~ Bootstrap搭建的个人博客