PHP bestimmt die Stringlänge mit den Funktionen strlen() und mb_strlen()

巴扎黑
Freigeben: 2016-11-09 14:38:49
Original
1553 Leute haben es durchsucht

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 
?>
Nach dem Login kopieren

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 
?>
Nach dem Login kopieren

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=&#39;中文a字1符&#39;;
echo strlen($str).&#39;<br>&#39;;//14
echo mb_strlen($str,&#39;utf8&#39;).&#39;<br>&#39;;//6
echo mb_strlen($str,&#39;gbk&#39;).&#39;<br>&#39;;//8
echo mb_strlen($str,&#39;gb2312&#39;).&#39;<br>&#39;;//10
?>
Nach dem Login kopieren


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=&#39;utf-8&#39;){if($charset==&#39;utf-8&#39;) $str = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$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 = &#39;测试测试测试测试测试测试测试测&#39;;$str2 = &#39;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&#39;;$str3 = &#39;aa测试aa测试aa测试aa测试aaaaaa&#39;;echo strLength($str1,&#39;gb2312&#39;);echo strLength($str2,&#39;gb2312&#39;);echo strLength($str3,&#39;gb2312&#39;);
Nach dem Login kopieren


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);
Nach dem Login kopieren


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(&#39;/[/d/s]{2,}/&#39;,$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;
 }
  
?>
Nach dem Login kopieren


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(&#39;iconv_substr&#39;)) {
  return iconv_substr($str,$start,$length,$charset);
 }
 $re[&#39;utf-8&#39;]   = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff]
[/x80-/xbf]{3}/";
 $re[&#39;gb2312&#39;] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
 $re[&#39;gbk&#39;]   = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
 $re[&#39;big5&#39;]   = "/[/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;
}
Nach dem Login kopieren

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!