您好,登錄后才能下訂單哦!
這篇文章主要講解了“php如何實現字符串無亂碼翻轉”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“php如何實現字符串無亂碼翻轉”吧!
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如何實現字符串無亂碼翻轉這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。