Heim >CMS-Tutorial >DEDECMS >So verwenden Sie die String-Interception-Funktion von dedecms

So verwenden Sie die String-Interception-Funktion von dedecms

藏色散人
藏色散人Original
2020-01-11 10:03:082173Durchsuche

So verwenden Sie die String-Interception-Funktion von dedecms

Wie verwende ich die String-Interception-Funktion von dedecms?

Dedecms cn_substr_utf8 String-Interception-Funktionsdiskussion

Empfohlene Studie: Dream Weaver cms

Ich habe diesen Artikel auf PHPSIR gesehen. Die Hauptsache ist dass es einige Probleme mit der cn_substr_utf8-Funktion von dedecms zu geben scheint lautet wie folgt:

/**
* utf-8中文截取,单字节截取模式
*
* @access public
* @param string $str 需要截取的字符串
* @param int $slen 截取的长度
* @param int $startdd 开始标记处
* @return string
*/
if ( ! function_exists('cn_substr_utf8'))
{
function cn_substr_utf8($str, $length, $start=0)
{
if(strlen($str) < $start+1)
{
return &#39;&#39;;
}
preg_match_all("/./su", $str, $ar);
$str = &#39;&#39;;
$tstr = &#39;&#39;;</p> <p> //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取
for($i=0; isset($ar[0][$i]); $i++)
{
if(strlen($tstr) < $start)
{
$tstr .= $ar[0][$i];
}
else
{
if(strlen($str) < $length + strlen($ar[0][$i]) )
{
$str .= $ar[0][$i];
}
else
{
break;
}
}
}
return $str;
}
}

Der

-Code lautet wie folgt:

if(strlen($str) < $length + strlen($ar[0][$i]) )

Eine Zeile kann nach dem Abfangen ein zusätzliches Zeichen verursachen. Sie können ihn in

Der Code lautet wie folgt:

if(strlen($str) < $length + strlen($ar[0][$i]) -1 )

Der Testcode lautet wie folgt

Der Code lautet wie folgt:

$f = "你好fasdfa你fasdf#e#";
$pos = strpos($f,'#e#');
var_dump($pos);
var_dump(cn_substr_utf8($f,$pos));
var_dump(cn_substr_utf82($f,$pos));

function cn_substr($str, $slen, $startdd=0) { global $cfg_soft_lang; if($cfg_soft_lang=='utf-8') { return cn_substr_utf8($str, $slen, $startdd); } $restr = ''; $c = ''; $str_len = strlen($str); if($str_len < $startdd+1) { return ''; } if($str_len < $startdd + $slen || $slen==0) { $slen = $str_len - $startdd; } $enddd = $startdd + $slen - 1; for($i=0;$i<$str_len;$i++) { if($startdd==0) { $restr .= $c; } else if($i > $startdd) { $restr .= $c; }

if(ord($str[$i])>0x80) { if($str_len>$i+1) { $c = $str[$i].$str[$i+1]; } $i++; } else { $c = $str[$i]; }

if($i >= $enddd) { if(strlen($restr)+strlen($c)>$slen) { break; } else { $restr .= $c; break; } } } return $restr; }

function cn_substr_utf8($str, $length, $start=0) { if(strlen($str) < $start+1) { return ''; } preg_match_all("/./su", $str, $ar);

$str = ''; $tstr = '';

//为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取 for($i=0; isset($ar[0][$i]); $i++) { if(strlen($tstr) < $start) {

$tstr .= $ar[0][$i]; } else {

if(strlen($str) < $length + strlen($ar[0][$i]) ) {

$str .= $ar[0][$i]; } else {

break; } } } return $str; }

function cn_substr_utf82($str, $length, $start=0) { if(strlen($str) < $start+1) { return ''; } preg_match_all("/./su", $str, $ar);

$str = ''; $tstr = '';

//为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取 for($i=0; isset($ar[0][$i]); $i++) { if(strlen($tstr) < $start) {

$tstr .= $ar[0][$i]; } else {

if(strlen($str) < $length + strlen($ar[0][$i]) -1 ) // phpsir 加了 -1 {

$str .= $ar[0][$i]; } else {

break; } } } return $str; }

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die String-Interception-Funktion von dedecms. 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