前言
網(wǎng)上流傳著這么一個騰訊筆試題:
PHP的strtolower()和strtoupper()函數(shù)在安裝非中文系統(tǒng)的服務(wù)器下可能會導(dǎo)致將漢字轉(zhuǎn)換為亂碼,請寫兩個替代的函數(shù)實現(xiàn)兼容Unicode文字的字符串大小寫轉(zhuǎn)換。
舉個例子,我們直接對中英文混排的字符串處理是會出亂碼的,如:
php > $a = 'abc中華ABC';php > var_dump(strtoupper($a));string(12) "ABC??ō?ABC"php >
The decimal set: 0 nul 1 soh 2 stx 3 etx 4 eot 5 enq 6 ack 7 bel 8 bs 9 ht 10 nl 11 vt 12 np 13 cr 14 so 15 si 16 dle 17 dc1 18 dc2 19 dc3 20 dc4 21 nak 22 syn 23 etb 24 can 25 em 26 sub 27 esc 28 fs 29 gs 30 rs 31 us 32 sp 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127 del由 ascii 表我們看出英文小寫字母的ascii 值在 97 ~ 122 之間,由此可得出我們的程序:
<?phpfunction mystrtoupper($a){ $b = str_split($a, 1); $r = ''; foreach($b as $v){ $v = ord($v); if($v >= 97 && $v<= 122){ $v -= 32; } $r .= chr($v); } return $r;}$a = 'a中你繼續(xù)F@#$%^&*(BMDJFDoalsdkfjasl';echo 'origin string:'.$a."";echo 'result string:';$r = mystrtoupper($a);var_dump($r);輸出結(jié)果 :
origin string:a中你繼續(xù)F@#$%^&*(BMDJFDoalsdkfjasl
result string:string(39) "A中你繼續(xù)F@#$%^&*(BMDJFDOALSDKFJASL"大寫轉(zhuǎn)小寫同理可得,不再贅述,完整兩個方法的代碼及使用,可下載:http://download.csdn.net/detail/agangdi/8171599
當(dāng)然了,編程是一門藝術(shù),同一個功能有多種多樣的實現(xiàn)方法,如果您有什么別的辦法,可以盡情評論指教,如果讀者覺得該方法有什么不妥之后,也可隨時指正。
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選