Heim > Artikel > Backend-Entwicklung > Was soll ich tun, wenn beim Abfangen von Substr verstümmelte chinesische Zeichen angezeigt werden?
<pre style="font-family:Consolas; font-size:12pt">方法一:
<?php header("Content-Type: text/html; charset=utf-8");$str="107sadf网站工作室欢迎您!"; echo strlen($str)."<br>"; echo substr($str,0,12)."<br>"; echo mb_strlen($str,"UTF8")."<br>"; echo mb_substr($str,0,12,"UTF8")."<br>"; ?><br>
显示结果如下
34 107sadf网� 16 107sadf网站工作室
Die Funktion strlen() gibt die Länge der von der Zeichenfolge belegten Bytes, einen englischen Buchstaben, eine Zahl usw. zurück Symbole Jedes belegt ein Byte und ihre Länge beträgt 1. Ein chinesisches Zeichen belegt zwei Bytes, daher beträgt die Länge eines chinesischen Zeichens 2. Für ein chinesisches UTF-8-Zeichen wird es so behandelt, als hätte es eine Länge von 3. <br>
怎么准确的计算字符串的长度呢?这里,得引入另外一个函数mb_strlen()。mb_strlen()函数的用法与strlen()几乎一摸一样,只是多了一个指定字符集编码的参数。函数原型为:
mb_substr也同样的原理注:mb_strlen与mb_substr并不是PHP的核心函数,使用前需要打开php.ini中的extension=php_mbstring.dll这一项 方法二: <?php header("Content-Type: text/html; charset=utf-8"); $str="107sadf网站工作室欢迎您!"; function chinesesubstr($str,$start,$len){ $strlen = $len - $start; //定义需要截取字符的长度 for($i=0;$i<$strlen;$i++){ //使用循环语句,单字截取,并用$tmpstr.=$substr(?,?,?)加起来 if(ord(substr($str,$i,1))>0xa0){ //ord()函数取得substr()的第一个字符的ASCII码,如果大于0xa0的话则是中文字符 $tmpstr.=substr($str,$i,3); //设置tmpstr递加,substr($str,$i,3)的3是指三个字符当一个字符截取(因为utf8编码的三个字符算一个汉字) $i+=2; } else{ //其他情况(英文)按单字符截取 $tmpstr.=substr($str,$i,1); } } return $tmpstr;} echo chinesesubstr($str,0,12)."<br>"; ?>
Das Endergebnis wird angezeigt als:
107sadf网站
<br>
Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn beim Abfangen von Substr verstümmelte chinesische Zeichen angezeigt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!