Maison > développement back-end > tutoriel php > Que dois-je faire si des caractères chinois tronqués apparaissent lors de l'interception de substr ?

Que dois-je faire si des caractères chinois tronqués apparaissent lors de l'interception de substr ?

一个新手
Libérer: 2023-03-15 19:02:01
original
2163 Les gens l'ont consulté
<pre style="font-family:Consolas; font-size:12pt">方法一:
Copier après la connexion
<?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>";
?>
Copier après la connexion
<br>
显示结果如下
Copier après la connexion
34
107sadf网�
16
107sadf网站工作室
Copier après la connexion

La fonction strlen() renvoie la longueur d'octets occupés par la chaîne, une lettre anglaise, un chiffre et divers symboles Chacun occupe un octet et leur longueur est de 1. Un caractère chinois occupe deux octets, la longueur d'un caractère chinois est donc de 2. Pour un caractère chinois UTF-8, il sera traité comme ayant une longueur de 3. <br>

怎么准确的计算字符串的长度呢?这里,得引入另外一个函数mb_strlen()。mb_strlen()函数的用法与strlen()几乎一摸一样,只是多了一个指定字符集编码的参数。函数原型为:
Copier après la connexion
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>";
 ?>
Copier après la connexion

Le résultat final s'affiche comme suit :

107sadf网站
Copier après la connexion
<br>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal