ホームページ php教程 php手册 php实现中文字串截取无乱码的方法

php实现中文字串截取无乱码的方法

May 25, 2016 pm 04:44 PM

有不少php初学者截取字符都会使用substr()函数或者mb_substr()函数来截取了,第一个中文肯定乱码了,第二个性能不好,下面我总结了几个自定的中文字串截取无乱码实例.

例1代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?php function msubstr($str, $start = 0, $length, $charset = "utf-8", $suffix = true) {

    if (function_exists("mb_substr")) return mb_substr($str, $start, $length, $charset);

    elseif (function_exists(&#39;iconv_substr&#39;)) {

        return iconv_substr($str, $start, $length, $charset);

    }

    $re[&#39;utf-8&#39;] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";

    $re[&#39;gb2312&#39;] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";

    $re[&#39;gbk&#39;] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";

    $re[&#39;big5&#39;] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";

    preg_match_all($re[$charset], $str, $match);

    $slice = join("", array_slice($match[0], $start, $length));

    if ($suffix) return $slice . "…";

    return $slice;

}

?>

ログイン後にコピー

例2代码如下: 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<?php

//$start:指定开始截取字符串的位置;$length指定截取字符的长度

function substr2($string, $start, $length) {

    $len = strlen($string);

    if ($len > $length) {

        $str = &#39;&#39;;

        $len1 = $start + $length; //截取到原字符串的位置

        for ($i = $start; $i < $len1; $i++) {

            if (ord(substr($string, $i, 2)) > 0xa0) //在ASCII中,0xa0表示汉字的开始

            {

                $str.= substr($string, $i, 2);

                $i++;

            } else {

                $str.= substr($string, $i, 1);

            }

        }

        return $str . &#39;...&#39;;

    } else {

        return $string;

    }

}

?>

    

ログイン後にコピー

例3代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?php

function chinesesubstr($str, $start, $len) {

    $strlen = $start + $len;

    for ($i = 0; $i < $strlen; $i++) {

        if (ord(substr($str, $i, 1)) > 0xa0) {

            $tmpstr.= substr($str, $i, 2);

            $i++;

        } else {

            $tmpstr.= substr($str, $i, 1);

        }

    }

    return $tmpstr;

}

$str = "waiting for you 等wait你back";

echo chinesesubstr($str, 0, 19)

?>

ログイン後にコピー

               
               

本文地址:

转载随意,但请附上文章地址:-)

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)