php實作字串無亂碼翻轉的方法:1、建立PHP範例檔案並設定編碼為utf8;2、用mb_strlen函取得算utf8字串的長度;3、將字串拆開放入數組;4、將數組按鍵名大小反轉;5、將數組中單一字元元素重新組合成字串即可。
本文操作環境:Windows7系統、PHP7.1版、DELL G3電腦
php怎麼實作字串無亂碼翻轉?
PHP中實作中文字串反轉避免亂碼的方法:
今天部落客在網路上看PHP面試題的時候,看到了這麼一個問題,如何實現字串反轉,當時想不是有一個內建函數strrev能實現這個函數嗎?後來試了一下,這個函數只能對英文字元反轉,對中文會有亂碼出現。主要原因還是編碼上的問題。
PHP中utf-8編碼中文當作3個位元組計算,gb2312當作2個位元組計算。所以想要實作中文字串的一些功能,首先就要解決編碼問題。
今天這個功能就是從編碼處下手的。接下來開始講實現的功能,今天要用到這麼多函數:
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,其他編碼都不會得到正確的結果)。
接下來就是完整的程式碼了,簡略的註解都已經標註好了,其實只要看一遍都能看懂:
<?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); /* 得到结果: * 这是我的技术博客,欢迎多多来访! * !访来多多迎欢,客博术技的我是这 */ ?>
如果文中有任何錯誤,敬請指出,以便完善。
推薦學習:《PHP影片教學》
以上是php怎麼實作字串無亂碼翻轉的詳細內容。更多資訊請關注PHP中文網其他相關文章!