首頁  >  文章  >  後端開發  >  PHP中實作中文字串反轉避免亂碼的方法

PHP中實作中文字串反轉避免亂碼的方法

不言
不言原創
2018-04-16 14:05:382222瀏覽

這篇文章主要介紹的內容是關於PHP中實現中文字串反轉避免亂碼的方法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下



今天部落客在網路上看PHP面試題的時候,看到了這麼一個問題,如何實現字串反轉,當時想不是有一個內建函數strrev能實現這個功能嗎?後來試了一下,這個函數只能對英文字元反轉,對中文會有亂碼出現。主要原因還是編碼上的問題。


   PHP中utf-8編碼中文當作3個位元組計算,gb2312當作2個位元組計算。所以想要實作中文字串的一些功能,首先就要解決編碼問題。



   今天這個功能就是從編碼處下手的。接下來開始講實現的功能,今天要用到這麼幾個函數:



##

   上面用到了3個mb開頭的函數,mb開頭的函數都是用來處理多位元組字串的,主要是能指定字串編碼。


mb_check_encoding()接受兩個參數,第一個參數要是字串,第二個參數是輸入一個字元編碼,然後判斷字串是否屬於該編碼,傳回一個bool值,若省略第二個參數則預設為內部編碼,可透過mb_internal_encoding()檢視。

mb_strlen()有兩個參數,第一個是字串內容,第二個是字串的編碼。

mb_substr()有四個參數,第一個是要截取的字串內容,第二個是開始被截取的位置,第三個是截取的長度,第四個是字串的編碼(在本例中要選擇utf-8,其他編碼都不會得到正確的結果)。



接下來就是完整的程式碼了,簡略的註解都已經標註好了,其實只要看一遍都能看懂:


# ############1######2######3#######4#######5###


##

is_string()//判断参数是否为字符串,这个大家应该都知道
mb_check_encoding()//用来检查给定的字符串是否属于指定的编码
mb_strlen()//用来获取字符串长度
mb_substr()//用来截取字符串中的字符
krsort()//将数组按键名由大到小排序上述


1

##2

3

4

5

6

##10

11

12

13

14

15

16

################ # #17######18######19######20###

21

22

23

24

25

26

27

#28

29

30

31

#32

33

#34

################################## # #35######36######37#####

38


<?php
    header("Content-type:text/html;charset=utf-8");
    $s="这是我的技术博客,欢迎多多来访!";
                              
    function str_rev($str){
        //先判断参数是否为字符串,且为UTF8编码
        if(!is_string($str)||!mb_check_encoding($str,"utf-8")){
            die("输入的不是utf8类型的字符串");
        }
                                  
        //用mb_strlen函获取算utf8字符串的长度
        $length=mb_strlen($str,"utf-8");
                                  
        //声明一个数组备用
        $arr=array();
                                  
        //将字符串拆开放入数组
        for($i=0;$i<$length;$i++){
            $arr[$i]=mb_substr($str,$i,1,"utf-8");
        }
                                  
        //将数组按键名大小反转
        krsort($arr);
                                  
        //将数组中单个字符元素重新组合成字符串
        $str=implode("",$arr);
                                  
        //将翻转后的字符串返回
        return $str;
    }
                              
    echo $s."<br>";
    echo str_rev($s);
/*  得到结果:
 *  这是我的技术博客,欢迎多多来访!
 *  !访来多多迎欢,客博术技的我是这
 */


?>


如果文中有任何错误,敬请指出,以便完善。


本文来自:http://5655237.blog.51cto.com/5645237/1258300

相关推荐:

php中实现sftp的方法



以上是PHP中實作中文字串反轉避免亂碼的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn