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

2021-08-18 20:28:31 字數 3599 閱讀 8270

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

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

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

1

2

3

4

5

is_string()//判斷引數是否為字串,這個大家應該都知道

mb_check_encoding()//用來檢查給定的字串是否屬於指定的編碼

mb_strlen()//用來獲取字串長度

mb_substr()//用來擷取字串中的字元

krsort()//將陣列按鍵名由大到小排序上述

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

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

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

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

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

1

2

3

4

5

6

7

8

9

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="這是我的技術部落格,歡迎多多來訪!";

functionstr_rev($str)

//用mb_strlen函獲取算utf8字串的長度

$length=mb_strlen($str,"utf-8");

//宣告乙個陣列備用

$arr=array();

//將字串拆開放入陣列

for($i=0;$i<$length;$i++)

//將陣列按鍵名大小反轉

krsort($arr);

//將陣列中單個字元元素重新組合成字串

$str=implode("",$arr);

//將翻轉後的字串返回

return$str;

}

echo$s."

";

echostr_rev($s);

/*  得到結果:

*  這是我的技術部落格,歡迎多多來訪!

*  !訪來多多迎歡,客博術技的我是這

*/

?>

如果文中有任何錯誤,敬請指出,以便完善。

PHP反轉中文字串

如何翻轉乙個中文字串?如 str 天氣真好 字串反轉函式strrev 是乙個單位元組反轉的函式。對於多位元組編碼的中文字元,不能正常使用。因此,這個問題就涉及到php國際化與字元編碼支援。使用多位元組字串函式可以很好解決這個問題。header content type text html chars...

php中文字串反轉

1 2header content type text html charset utf 8 3 4此函式的作用是反轉中文字串 5mb strlen 獲取字元的長度 6mb substr 獲取字元的單個元素 7krsort 按照鍵值逆序排序陣列 8implode 將陣列拼接為字串 9explode ...

php函式strrev 反轉中文字串亂碼的問題

解決辦法 先把中文字串打散成陣列,然後用krsort 函式對陣列按鍵名降序排序,排好序之後再用implode 或join 函式將陣列合併成字串。header content type text html charset utf 8 str 反轉中文 str arr ch2arr str 將中文字串打...