/*
* 中文字符串截取,支持gb2312/gbk/utf-8/big5
*
* @param string $str 要截取的字串
* @param int $start 截取起始位置
* @param int $length 截取长度
* @param string $charset utf-8|gb2312|gbk|big5 编码
* @param string $suffixChars 后缀字符
* @param Boolean $suffix 是否加后缀
*/
public function csubstr($str, $start = 0, $length, $charset = 'gb2312', $suffixChars = '…', $suffix = true)
{
if (function_exists("mb_substr")) {
if (mb_strlen($str, $charset) <= $length) {
return $str;
}
$slice = mb_substr($str, $start, $length, $charset);
} else {
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
if (count($match[0]) <= $length) {
return $str;
}
$slice = join("",array_slice($match[0], $start, $length));
}
if ($suffix) {
return $slice . $suffixChars;
}
return $slice;
}
再
一个:
function cutstr( $string , $length , $dot = ' ...' ) {
if ( strlen ( $string ) <= $length ) {
return $string ;
}
$string = str_replace ( array ( '&' , '"' , '<' , '>' ), array ( '&' , '"' , '<' , '>' ), $string );
$strcut = '' ;
$n = $tn = $noc = 0;
while ( $n < strlen ( $string ) ) {
$t = ord ( $string [ $n ] );
if ( $t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
$tn = 1;
$n ++;
$noc ++;
} elseif (194 <= $t && $t <= 223) {
$tn = 2;
$n += 2;
$noc += 2;
} elseif (224 <= $t && $t < 239) {
$tn = 3;
$n += 3;
$noc += 2;
} elseif (240 <= $t && $t <= 247) {
$tn = 4;
$n += 4;
$noc += 2;
} elseif (248 <= $t && $t <= 251) {
$tn = 5;
$n += 5;
$noc += 2;
} elseif ( $t == 252 || $t == 253) {
$tn = 6;
$n += 6;
$noc += 2;
} else {
$n ++;
}
if ( $noc >= $length ) {
break ;
}
}
if ( $noc > $length ) {
$n -= $tn ;
}
$strcut = substr ( $string , 0, $n );
$strcut = str_replace ( array ( '&' , '"' , '<' , '>' ), array ( '&' , '"' , '<' , '>' ), $strcut );
return $strcut . $dot ;
}
分享到:
相关推荐
for encoding in ['utf-8', 'gbk', 'big5']: try: return data.decode(encoding) except UnicodeDecodeError: pass raise ValueError("无法识别的编码") ``` 5. **处理宽字符与窄字符**:在某些编码中,比如...
/* * @todo 中文截取,支持gb2312,gbk,utf-8,big5 * * @param string $str 要截取的字串 * @param int $start 截取起始位置 * @param int $length 截取长度 * @param string $charset utf-...
需要注意的是,不同编码方式(如GBK、Big5等)下的汉字可能占用不同数量的字节,因此在实际应用中,需要根据字符串的实际编码方式进行调整。如果你的字符串是其他编码格式,你需要将`getBytes(StandardCharsets.UTF_...
同时,对于中文字符的处理,开发者应当考虑到不同的字符集和编码方式(如BIG5、GBK、GB2312等),可能会导致不同的计算结果,选择合适的处理策略。 为了编写健壮的代码,开发者可以通过多种方式测试和验证字符计数...
另一个截取中文字符串的通用方法是`csubstr`函数,它可以处理不同的字符编码,如`utf-8`, `gb2312`, `gbk`, 和 `big5`。这个函数使用`mb_substr`函数(如果存在)来执行截取,或者使用正则表达式匹配和字符数组切片...
正则表达式部分是针对不同编码(如UTF-8、GB2312、GBK和Big5)设计的,用来匹配特定编码下的单个字符。通过`preg_match_all`匹配所有符合规则的字符,并使用`array_slice`来获取指定范围内的字符,然后用`join`连接...
$encode = mb_detect_encoding($keytitle, array('GBK', 'UTF-8', 'ASCII', 'GB2312', 'BIG5'), true); ``` 这里的第三个参数`true`代表启用`strict`模式,它会更严格地检查编码,从而可能提高识别的准确性。但需要...
对于处理中文字符串,了解不同的字符编码(如GBK、GB2312、Big5、UTF-8等)及其转换至关重要。`iconv()`函数是PHP中进行字符编码转换的利器,它可以有效地解决因编码不匹配导致的乱码问题。在实际开发中,确保正确...
`CSubstr`函数是更为通用的多字节字符集字符串截取函数,支持GB2312、GBK、UTF-8和BIG5等编码。首先检查是否支持`mb_substr`函数,如果有则直接使用,否则使用正则表达式匹配字符集的特征,进行截取。 这些函数的...
`msubstr`函数的主要目的是兼容不同的多字节字符集(如UTF-8、GBK、GB2312等),确保在没有`mb_substr`或`iconv_substr`函数可用的情况下也能正常工作。以下是`msubstr`函数的详细说明: ```php function msubstr($...
在实现自定义的msubstr函数时,需要处理不同字符集的编码规则,包括UTF-8、GBK、GB2312和Big5等常见的编码方式。这里使用了正则表达式来匹配和处理不同编码规则的字符串,然后根据传入的字符集参数进行匹配。使用...
也可以指定为其他字符集,如gb2312、gbk、big5等。 - $suffix=true:是否在截取后的字符串末尾添加省略号,默认为true表示添加。如果设置为false,则不添加。 在实际使用中,msubstr()函数常被用在模板标签中,如:...
6. **字符编码理解**:在处理中文字符时,需要理解不同的字符编码标准,例如GBK、Big5、UTF-8等,以及它们在简体和繁体中文之间的关系。这有助于确保转换的正确性,防止乱码问题。 7. **程序设计与调试**:在实际...
在计算机中,文本数据是以特定的编码形式存储的,常见的有ASCII、GB2312、GBK、UTF-8等。编码取字就是指根据特定的编码规则,将数字(字节序列)转换成可读的字符或者从字符反向获取其对应的数字表示的过程。在...
2. **字符编码转换**:模块可能提供了将UTF-8、UTF-16等常见Unicode编码与其他编码(如GBK、BIG5等)相互转换的功能。 3. **文本搜索与替换**:支持在Unicode文本中进行关键词查找和替换操作,不受字符集限制。 4....