這篇文章主要介紹的內容是關於PHP中實現中文字串反轉避免亂碼的方法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
今天部落客在網路上看PHP面試題的時候,看到了這麼一個問題,如何實現字串反轉,當時想不是有一個內建函數strrev能實現這個功能嗎?後來試了一下,這個函數只能對英文字元反轉,對中文會有亂碼出現。主要原因還是編碼上的問題。
PHP中utf-8編碼中文當作3個位元組計算,gb2312當作2個位元組計算。所以想要實作中文字串的一些功能,首先就要解決編碼問題。
今天這個功能就是從編碼處下手的。接下來開始講實現的功能,今天要用到這麼幾個函數:
# ############1######2######3#######4#######5### |
is_string()//判断参数是否为字符串,这个大家应该都知道 mb_check_encoding()//用来检查给定的字符串是否属于指定的编码 mb_strlen()//用来获取字符串长度 mb_substr()//用来截取字符串中的字符 krsort()//将数组按键名由大到小排序上述 |
1 ##23 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中實作中文字串反轉避免亂碼的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!