>  기사  >  백엔드 개발  >  PHP로 중국어 문자열을 가로채는 문제 해결

PHP로 중국어 문자열을 가로채는 문제 해결

巴扎黑
巴扎黑원래의
2016-11-11 13:37:341361검색

PHP에서 가로채는 문자열이 영어인 경우 substr을 직접 사용하면 쉽습니다. 일반적으로 중국어는 약간 번거롭습니다.
( 1) Multi-Byte 함수 라이브러리의 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으로 문의하세요.