包含漢字字符串亂碼
PHP面試題,題目很短,也很常見,但更容易出錯,題目如下
如何實現字符串翻轉?
第一反應,當然是strrev函數啦,這么容易的題目還放在面試里考,真不嫌麻煩???但是看了網上的答案后,發現自己錯了~~~
strrev函數對英文很好用,直接可以實現字符串翻轉,但是面對中文呢?肯定都是亂碼,對于這樣的問題有很多,比如strstr,substr等函數都是這樣的。還好PHP提供了mb_類的函數實現不同編碼、不同語言之間的相互轉換等操作。下面是我寫的PHP字符串翻轉函數(mb_類的函數需要開啟一個mb_string實現)。
解決方案
代碼:
<?php header("content-type:text/html;charset=utf-8"); /** strrev() 函數反轉字符串。 語法 strrev(string) 參數 描述 string 必需。規定要反轉的字符串。 */ /** 此函數的作用是反轉中文字符串 mb_strlen() 獲取字符的長度 mb_substr() 獲取字符的單個元素 krsort() 按照鍵值逆序排序數組,對關聯數組按照鍵名進行降序排序 Array ( [8] => 國 [7] => 中 [6] => h [5] => s [4] => i [3] => l [2] => g [1] => n [0] => E ) English中國->國中hsilgnE (ksort()對關聯數組按照鍵名進行升序排序) implode() 將數組拼接為字符串 explode() 使用字符串分隔字符串 */ function str_rev_gb($str){ //判斷輸入的是不是utf8類型的字符,否則退出 if(!is_string($str)||!mb_check_encoding($str,'UTF-8')){ exit("輸入類型不是UTF8類型的字符串"); } $array=array(); //將字符串存入數組 $l=mb_strlen($str,'UTF-8');//在mb_strlen計算時,選定內碼為UTF8,則會將一個中文字符當作長度1來計算 for($i=0;$i<$l;$i++){ $array[]=mb_substr($str,$i,1,'UTF-8'); } //反轉字符串 krsort($array); //拼接字符串 $string=implode($array); return $string; } $str1 = "Englist"; $str2 = "English中國"; $str3 = "Eng中lish國"; $str4 = "中華人民共和國"; echo '直接用PHP自帶strrev函數反轉:'.'<br />'; echo $str1."->".strrev($str1)."<br>"; echo $str2."->".strrev($str2)."<br>"; echo $str3."->".strrev($str3)."<br>"; echo $str4."->".strrev($str4)."<br>"; echo '<br />'; echo $str1."->".str_rev_gb($str1)."<br>"; echo $str2."->".str_rev_gb($str2)."<br>"; echo $str3."->".str_rev_gb($str3)."<br>"; echo $str4."->".str_rev_gb($str4)."<br>";
運行結果:
直接用PHP自帶strrev函數反轉:
Englist->tsilgnE
English中國->��學�hsilgnE
Eng中lish國->���hsil���gnE
中華人民共和國->��匒居呰溺䎍學�
Englist->tsilgnE
English中國->國中hsilgnE
Eng中lish國->國hsil中gnE
中華人民共和國->國和共民人華中
需要注意的是,mb_strlen并不是PHP核心函數,使用前需要確保在php.ini中加載了php_mbstring.dll,即確保“extension=php_mbstring.dll”這一行存在并且沒有被注釋掉,否則會出現未定義函 數的問題。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。