ホームページ >バックエンド開発 >PHPチュートリアル >PHP は、Unicode テキストと互換性のある文字列の大文字と小文字の変換 strto lower() および strtoupper() を実装します。
前書き
インターネット上で次のような Tencent の筆記試験問題が出回っています:PHP の strto lower() および strtoupper() 関数は、中国語以外のシステムを搭載したサーバーがインストールされている場合、中国語の文字を文字化けに変換する可能性があります。 Unicode テキストと互換性のある 2 つの代替関数を実装してください。
例えば、中国語と英語が混在した文字列を直接処理すると、次のような文字化けが発生します。
php > $a = 'abc中华ABC';php > var_dump(strtoupper($a));string(12) "ABC??ō?ABC"php >中国語はUTF8エンコードでは3文字で構成されていることがわかっているので、考え方を変えてみましょう同様に、英語の小文字を大文字に変換する関数では、文字列を 1 文字ずつ処理するだけで済みます。小文字のみが処理されるので、文字が小文字であるかどうかを判断するにはどうすればよいでしょうか? もちろん、Linux または Mac OS (実際には Linux システムでもあります) を使用している人は、man ascii コマンドを直接使用して表示できます。対応する文字の ASCII コード:
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 delASCII テーブルから、英語の小文字の 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中你继续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