很多站长朋友们都不太清楚php截取汉子,今天小编就来给大家整理php截取汉子,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php如何截取汉字长度啊? 2、 php要截取一段汉语文字,怎样才能保证不把汉字拆开? 3、 如何利用PHP来截取一段中文字符串而不出现乱码 php如何截取汉字长度啊?function cutstr($string, $length, $dot = '') {
global $dbcharset;
$length*=2;
if(strlen($string) <= $length) {
return $string;
}
$string = str_replace(array('', '"', '<', '>'), array('', '"', '<', '>'), $string);
$strcut = '';
if(strtolower($dbcharset) == 'utf8') {
$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);
} else {
for($i = 0; $i < $length; $i++) {
$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
}
}
$strcut = str_replace(array('', '"', '<', '>'), array('', '"', '<', '>'), $strcut);
return $strcut.$dot;
}
php要截取一段汉语文字,怎样才能保证不把汉字拆开?还得看你的编码是gbk的还是UTF8的。
以下是UTF-8的编码下的截取
function smarty_modifier_truncate_utf8($string, $length, $etc = '...')
{
$result = '';
$string = html_entity_decode(trim(strip_tags($string)), ENT_QUOTES, 'UTF-8');
$strlen = strlen($string);
for($i = 0; (($i < $strlen) ($length > 0)); $i++)
{
if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
{
if($length < 1.0)
{
break;
}
$result .= substr($string, $i, $number);
$length -= 1.0;
$i += $number - 1;
}
else
{
$result .= substr($string, $i, 1);
$length -= 0.5;
}
}
$result = htmlspecialchars($result, ENT_QUOTES, 'UTF-8');
if($i < $strlen)
{
$result .= $etc;
}
return $result;
}
以下是GBK编码下的截取(常用)
function gbk_strlen($string)
{
if(extension_loaded('mbstring'))
{
mb_internal_encoding('GBK');
return mb_strlen($string);
}
else
{
preg_match_all('/[\x81-\xfe]?./', $string, $match);
return count($match[0]);
}
}
function gbk_substr($string, $start, $length = null)
{
if(extension_loaded('mbstring'))
{
mb_internal_encoding('GBK');
if(is_null($length))
{
return mb_substr($string, $start);
}
else
{
return mb_substr($string, $start, $length);
}
}
else
{
preg_match_all('/[\x81-\xfe]?./', $string, $match);
if(is_null($length))
{
return implode('', array_slice($match[0], $start));
}
else
{
return implode('', array_slice($match[0], $start, $length));
}
}
}
function smarty_modifier_truncate_gbk($string, $length = 80, $etc = '...',
$break_words = false, $middle = false)
{
if ($length == 0)
return '';
if (gbk_strlen($string) > $length) {
$length -= gbk_strlen($etc);
if (!$break_words !$middle) {
$string = preg_replace('/\s+?(\S+)?$/', '', gbk_substr($string, 0, $length+1));
}
if(!$middle) {
return gbk_substr($string, 0, $length).$etc;
} else {
return gbk_substr($string, 0, $length/2) . $etc . gbk_substr($string, -$length/2);
}
} else {
return $string;
}
}
如何利用PHP来截取一段中文字符串而不出现乱码/*
功能:截取全角和半角混合的字符串以避免乱码
参数:
$str_cut 需要截断的字符串
$length 允许字符串显示的最大长度
*/
function substr_cut($str_cut,$length = 30){
if (strlen($str_cut) >; $length){
for($i=0; $i < $length; $i++)
if (ord($str_cut[$i]) >; 128) $i++;
$str_cut = substr($str_cut,0,$i) . "...";
}
return $str_cut;
}
说明:
程序的关键语句是:
for($i=0; $i < $length; $i++)
if (ord($str_cut[$i]) >; 128) $i++;
$str_cut = substr($str_cut,0,$i) . "...";
如果字符的ASCII码大于128,说明当前字符和下一个字符是属于一个汉字的。
则,$i++ 跳过对下一个字符的判断。
再结合循环中的 $i++ ,实际上,当遇到一个汉字时,$i 就会加 2 ,从而正确的跳过汉字。
最终实现的效果是,$i 变量指向的要么是半角的字符,要么是全角汉字的首字符,不会指向
全角汉字的第二个字符,所以,当$i >;= $length 时,循环结束,使用
$str_cut = substr($str_cut,0,$i) . "..."; 截取字符时自然也就不会出现乱码了。
本人在写一个程序时需要利用PHP从一段字符串中截取指定长度的一段字符下来。以前在写ASP的时候,参考动网的程序写过类似的程序,不过,还没用PHP写过。
想偷懒,看有不有现成的代码可以用。于是,在GOOGLE中输入:PHP 截断字符 后查找到一段代码。
关于php截取汉子的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。