>  기사  >  CMS 튜토리얼  >  Dedecms가 단어 수를 더 정확하게 가로채기 위해 cn_substr 함수를 재정의하는 방법

Dedecms가 단어 수를 더 정확하게 가로채기 위해 cn_substr 함수를 재정의하는 방법

藏色散人
藏色散人원래의
2019-12-25 09:54:301869검색

Dedecms가 단어 수를 더 정확하게 가로채기 위해 cn_substr 함수를 재정의하는 방법

dedecms는 단어 수를 더 정확하게 가로채기 위해 cn_substr 함수를 어떻게 재정의하나요?

dedecms의 cn_substr() 및 cn_substr_utf8()이 가로채는 문자열 ms는 정확하지 않습니다. 저는 보통 cn_substr_utf8() 대신 cn_substr()을 사용하는데 지금은 비교적 정확합니다. 한자 2바이트에 맞춰 호출하면 됩니다

추천 학습: Dreamweaver cms

방법 설명:

1 includehelpersstring.helper.php를 찾아 원래 줄 33~102를 바꿉니다(즉, 정의 cn_substr( ) 함수), 걱정된다면 먼저 이 파일을 백업해도 됩니다.

코드는 다음과 같습니다.

/** 
* 中英文截取字符串,汉字安2个字节 
* 
* @access public 
* @param string $str 需要截取的字符串 
* @param int $cutLen 截取的长度 
* @param bool $cutSlashes 是否去掉\ 
* @param bool $addSlashes 是加\ 
* @param string $oDot 截取后加的字符串,如经常用的三个点 
* @param bool $hasHtml 是否有html 
* @return string 
*/ 
if ( ! function_exists(‘cn_substr’)){ 
function cn_substr($str, $cutLen, $oDot = null, $hasHtml = false, $cutSlashes = false, $addSlashes = false) { 
global $cfg_soft_lang; 
$str = trim ( $str ); 
if ($cutSlashes) $str = stripslashes ( $str ); 
if($hasHtml){ 
$str = preg_replace ( “/(\<[^\<]*\>|\r|\n|\s|\[.+?\])/is”, ‘ ‘, $str ); 
$str = htmlspecialchars ( $str ); 
}else{ 
$str = htmlspecialchars ( $str ); 
} 
if ($cutLen && strlen ( $str ) > $cutLen) { 
$nStr = ”; 
if ($cfg_soft_lang == ‘utf-8′) { 
$n = 0; 
$tn = 0; 
$noc = 0; 
while ( $n < strlen ( $str ) ) { 
$t = ord ( $str [$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 >= $cutLen)break; 
} 
if ($noc > $cutLen) $n -= $tn; 
$nStr = substr ( $str, 0, $n ); 
} else { 
for($i = 0; $i < $cutLen – 1; $i ++) { 
if (ord ( $str [$i] ) > 127) { 
$nStr .= $str [$i] . $str [$i + 1]; 
$i ++; 
} else { 
$nStr .= $str [$i]; 
} 
} 
} 
$str = $nStr . $oDot; 
} 
if ($addSlashes) $str = addslashes ( $str ); 
$str = htmlspecialchars_decode ( $str ); 
return trim ( $str ); 
} 
}

두 번째, 프로그램이 작동하는지 여부에 관계없이 전체 사이트는 cn_substr() 함수를 사용합니다. gbk 또는 utf8;

예를 들어 10자(병음과 한자 혼합)를 호출하려는 경우: [field:title function='cn_substr(@me,20)'] can

위 내용은 Dedecms가 단어 수를 더 정확하게 가로채기 위해 cn_substr 함수를 재정의하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.