strlen()
PHP strlen()-Funktion
Definition und Verwendung
strlen()-Funktion gibt die Länge einer Zeichenfolge zurück.
Syntax
strlen(string)
Parameter: string
Beschreibung: Erforderlich. Gibt die zu überprüfende Zeichenfolge an.
Der Code lautet wie folgt
<?php $str=‘中文a字1符‘; echo strlen($str); echo ‘<br />‘; echo mb_strlen($str,‘UTF8‘); //输出结果 //14 //6 ?>
Ergebnisanalyse: Bei der Berechnung von strlen wird ein chinesisches UTF8-Zeichen als 3 Längen behandelt, sodass die Länge von „Chinesisches Zeichen 1 Zeichen“ 3 beträgt *4 2 =14
Wenn bei der Berechnung von mb_strlen der interne Code als UTF8 ausgewählt ist, wird ein chinesisches Zeichen mit einer Länge von 1 berechnet, sodass die Länge von „Chinesisches Zeichen 1 Zeichen“ 6 beträgt
mb_strlen()-Funktion
Es ist zu beachten, dass mb_strlen keine PHP-Kernfunktion ist. Bevor Sie es verwenden, müssen Sie sicherstellen, dass php_mbstring.dll in php.ini geladen ist Stellen Sie sicher, dass die Zeile
"extension=php_mbstring. dll" vorhanden ist und nicht auskommentiert wurde, da andernfalls ein Problem mit der undefinierten Funktion auftritt.
Der Code lautet wie folgt:
<?php $str=‘中文a字1符‘; //计算如下 echo (strlen($str) + mb_strlen($str,‘UTF8‘)) / 2; echo //输出结果 //10 ?>
Der strlen($str)-Wert von „Chinesisch ein Zeichen 1 Zeichen“ ist 14 und der mb_strlen($str)-Wert ist 6, dann kann „Chinesisch ein Zeichen“ berechnet werden. Der Platzhalter für „Zeichen 1 Zeichen“ ist 10.
Erklären Sie den Unterschied zwischen den beiden
Der Code lautet wie folgt
<?php //测试时文件的编码方式要是UTF8 $str='中文a字1符'; echo strlen($str).'<br>';//14 echo mb_strlen($str,'utf8').'<br>';//6 echo mb_strlen($str,'gbk').'<br>';//8 echo mb_strlen($str,'gb2312').'<br>';//10 ?>
Ergebnisanalyse: Bei der Berechnung von strlen wird ein chinesisches UTF8-Zeichen als 3 Längen behandelt, sodass die Länge von „Chinesisches Zeichen 1 Zeichen“ 3 beträgt *4 2=14, in mb_strlen
Wenn bei der Berechnung der interne Code als UTF8 ausgewählt ist, wird ein chinesisches Zeichen mit einer Länge von 1 berechnet, also die Länge von „Chinesisches Zeichen 1 Zeichen“. ist 6.
Obwohl die obige Funktion einige Probleme beim Mischen von Chinesisch und Englisch einfach lösen kann, kann sie in der Praxis nicht verwendet werden.
Der Implementierungscode für PHP zum Ermitteln der Länge gemischter chinesischer und englischer Zeichenfolgen lautet wie folgt: 1 Chinesisch = 1 Ziffer, 2 Englisch = 1 Ziffer. Sie können ihn selbst ändern
Der Code ist wie folgt
/*** PHP获取字符串中英文混合长度 * @param $str string 字符串* @param $$charset string 编码* @return 返回长度,1中文=1位,2英文=1位*/function strLength($str,$charset='utf-8'){if($charset=='utf-8') $str = iconv('utf-8','gb2312',$str);$num = strlen($str);$cnNum = 0;for($i=0;$i<$num;$i++){if(ord(substr($str,$i+1,1))>127){$cnNum++;$i++;}}$enNum = $num-($cnNum*2);$number = ($enNum/2)+$cnNum;return ceil($number);} //测试输出长度都为15$str1 = '测试测试测试测试测试测试测试测';$str2 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';$str3 = 'aa测试aa测试aa测试aa测试aaaaaa';echo strLength($str1,'gb2312');echo strLength($str2,'gb2312');echo strLength($str3,'gb2312');
Interception-String-Funktion
UTF8-Codierung In UTF8 belegt ein chinesisches Zeichen 3 Bytes
Der Code ist wie folgt
function msubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for($i = 0; $i < $strlen; $i++){ if(ord(substr($str, $i, 1)) > 127){ $tmpstr.=substr($str, $i, 3); $i+=2; }else $tmpstr.= substr($str, $i, 1); } return $tmpstr; } echo msubstr("一二三天下致公english",0,10);
GB2312-Kodierung, in gb2312 belegt ein chinesisches Zeichen 2 Bytes
Der Code ist wie folgt
<?php function msubstr($str, $start, $len) { //ȡ $tmpstr = ""; $strlen = $start + $len; if(preg_match('/[/d/s]{2,}/',$str)){$strlen=$strlen-2;} for($i = 0; $i < $strlen; $i++) { if(ord(substr($str, $i, 1)) > 0xa0) { $tmpstr .= substr($str, $i, 2); $i++; } else $tmpstr .= substr($str, $i, 1); } return $tmpstr; } ?>
Funktion mit guter Codierungskompatibilität
Der Code lautet wie folgt
function cc_msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) { if(function_exists("mb_substr")) return mb_substr($str, $start, $length, $charset); elseif(function_exists('iconv_substr')) { return iconv_substr($str,$start,$length,$charset); } $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); $slice = join("",array_slice($match[0], $start, $length)); if($suffix) return $slice."…"; return $slice; }