前書き
インターネット上で次のような Tencent の筆記試験問題が出回っています:PHP の strto lower() および strtoupper() 関数は、中国語以外のシステムを搭載したサーバーがインストールされている場合、中国語の文字を文字化けに変換する可能性があります。 Unicode テキストと互換性のある 2 つの代替関数を実装してください。
例えば、中国語と英語が混在した文字列を直接処理すると、次のような文字化けが発生します。
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
<?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中你继续F@#$%^&*(BMDJFDoalsdkfjasl';echo 'origin string:'.$a."\n";echo 'result string:';$r = mystrtoupper($a);var_dump($r);
出力結果:
origin string:a中你继续F@#$%^&*(BMDJFDoalsdkfjaslresult string:string(39) "A中你继续F@#$%^&*(BMDJFDOALSDKFJASL"
大文字から小文字への変換も同じ方法で実行できるため、詳細は説明しません。完全なコードと 2 つのメソッドの使用法は、次の場所からダウンロードできます。 //download.csdn.net/detail/agangdi/8171599