>  기사  >  백엔드 개발  >  PHP 截取 中文

PHP 截取 中文

WBOY
WBOY원래의
2016-06-23 14:31:46888검색

函数巧妙地运用了正则表达式, 用起来很方便, 就像 substr 的用法一样, 可以正向截取也可反相截取, 思路值得学习.

PHP代码:

function c_substr ( $string,  $from,  $length =  null ){

     preg_match_all ( '/[x80-xff]?./',  $string,  $match );

     if ( is_null ( $length )){

         $result =  implode ( '',  array_slice ( $match [ 0 ],  $from ));

     } else {

         $result =  implode ( '',  array_slice ( $match [ 0 ],  $from,  $length ));

     }

     return  $result;

$str =  "zhon华人min共和guo";

$from =  3;

$length =  7;

echo (c_substr ( $str,  $from,  $length ));

// 输出: n华人min共

//还有utf-8的

Regarding windix's function to handle UTF-8 strings:

one can use the "u" modifier on the regular expression so that the pattern string is treated as UTF-8

(available from PHP 4.1.0 or greater on Unix and from PHP 4.2.3 on win32).

This way the function works for other encodings too (like Greek for example).

The modified function would read like this:

function utf8_substr ( $str, $start )  {

$null =  "";

    preg_match_all ( "/./u",  $str,  $ar );

    if ( func_num_args () >=  3 )  {

        $end =  func_get_arg ( 2 );

        return  join ( $null,  array_slice ( $ar [ 0 ], $start, $end ));

    }  else  {

        return  join ( $null,  array_slice ( $ar [ 0 ], $start ));

    }

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:php面试题目다음 기사:php 地址引用