Heim  >  Artikel  >  CMS-Tutorial  >  Wie dedecms die Funktion cn_substr neu definiert, um die Anzahl der Wörter genauer abzufangen

Wie dedecms die Funktion cn_substr neu definiert, um die Anzahl der Wörter genauer abzufangen

藏色散人
藏色散人Original
2019-12-25 09:54:301823Durchsuche

Wie dedecms die Funktion cn_substr neu definiert, um die Anzahl der Wörter genauer abzufangen

Wie definiert dedecms die Funktion cn_substr neu, um die Anzahl der Wörter genauer abzufangen?

Die von cn_substr() und cn_substr_utf8() von dedecms abgefangene Zeichenfolge ist nicht korrekt. Ich verwende normalerweise cn_substr() und möchte cn_substr_utf8() nicht verwenden Es ist jetzt immer noch besser. Rufen Sie einfach 2 Bytes eines chinesischen Zeichens auf

Empfohlenes Lernen: Dreamweaver cms

Methodenbeschreibung:

1 , find includehelpersstring .helper.php und ersetzen Sie die ursprünglichen Zeilen 33 bis 102 (das heißt, den Code, der die Funktion cn_substr() definiert). Wenn Sie Angst haben, können Sie zuerst diese Datei sichern, Liebes; lautet wie folgt:

/** 
* 中英文截取字符串,汉字安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 ); 
} 
}

2. Die gesamte Site verwendet die Funktion cn_substr(), egal ob Ihr Programm gbk oder utf8 ist.

Wenn Sie beispielsweise 10 Zeichen aufrufen möchten ( Pinyin und chinesische Schriftzeichen sind gemischt): [ field:title function='cn_substr(@me,20)'] then

Das obige ist der detaillierte Inhalt vonWie dedecms die Funktion cn_substr neu definiert, um die Anzahl der Wörter genauer abzufangen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn