ホームページ >バックエンド開発 >PHPチュートリアル >PHP は、Unicode テキストと互換性のある文字列の大文字と小文字の変換 strto lower() および strtoupper() を実装します。

PHP は、Unicode テキストと互換性のある文字列の大文字と小文字の変換 strto lower() および strtoupper() を実装します。

WBOY
WBOYオリジナル
2016-06-23 13:44:571535ブラウズ

前書き

インターネット上で次のような 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 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中你继续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

もちろん、プログラミングは芸術であり、同じ機能を実装する方法はたくさんあります。他の方法がある場合は、お気軽にコメントしてアドバイスをください。読者がこの方法に何か問題があると感じた場合は、いつでも修正できます。





声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。