ホームページ  >  記事  >  バックエンド開発  >  PHP で中国語の文字列をインターセプトする問題を解決する

PHP で中国語の文字列をインターセプトする問題を解決する

巴扎黑
巴扎黑オリジナル
2016-11-11 13:37:341319ブラウズ

PHP が英語の文字列をインターセプトする場合は、substr を直接使用するだけで簡単です。中国語は少し面倒です。
(1) マルチバイトを直接使用する。 function ライブラリの mb_substr(); 関数を使用するだけです。サンプルコードは次のとおりです

<?php    
echo mb_substr($str, $start, $length, $encoding);   
echo "<br />";   
?>

この方法は、シンプルで、高速で、美しく、魅力的です。 . .とにかく、それを説明するにはどんな良い言葉でも使うことができますが、残念ながら私の GoDaddy ホストはそれをサポートしていないので、別の方法を見つける必要があります

(2) 中国語の文字列インターセプト関数をカスタマイズします。基本的には、mb_substr を模倣する関数を書いてそれを呼び出すだけです。次のように直接、私が見つけたコードは実際には非常に単純です

<?php    
function  substr_cn($string_input,$start,$length)   
{   
    /* 功能:  
     * 此算法用于截取中文字符串  
     * 函数以单个完整字符为单位进行截取,即一个英文字符和一个中文字符均表示一个单位长度  
     * 参数:  
     * 参数$string为要截取的字符串,  
     * 参数$start为欲截取的起始位置,  
     * 参数$length为要截取的字符个数(一个汉字或英文字符都算一个)  
     * 返回值:  
     * 返回截取结果字符串  
     * */   
    $str_input=$string_input;   
    $len=$length;   
    $return_str="";   
    //定义空字符串   
    for ($i=0;$i<2*$len+2;$i++)   
        $return_str=$return_str." ";   
    $start_index=0;   
    //计算起始字节偏移量   
    for ($i=0;$i<$start;$i++)   
    {   
        if (ord($str_input{$start_index}>=161))          //是汉语        
        {   
            $start_index+=2;   
        }   
        else                                          //是英文   
        {   
            $start_index+=1;   
        }           
    }       
    $chr_index=$start_index;   
    //截取   
    for ($i=0;$i<$len;$i++)   
    {   
        $asc=ord($str_input{$chr_index});   
        if ($asc>=161)   
        {   
            $return_str{$i}=chr($asc);   
            $return_str{$i+1}=chr(ord($str_input{$chr_index+1}));   
            $len+=1; //结束条件加1   
            $i++;    //位置偏移量加1   
            $chr_index+=2;   
            continue;               
        }   
        else    
        {   
            $return_str{$i}=chr($asc);   
            $chr_index+=1;   
        }   
    }       
    return trim($return_str);   
}//en


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。