国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php實現(xiàn)兼容Unicode文字的字符串大小寫轉(zhuǎn)換strtol

2020-03-22 19:11:34
字體:
供稿:網(wǎng)友
  • 前言

    網(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 > 

    我們知道中文在 UTF8 編碼里是由3個字符組成的,那么換個思路,我們可以把一個中文當(dāng)成3個字符來處理,同理再換個思路,在一個把小寫英文轉(zhuǎn)換成大寫英文的函數(shù)里,我們要處理的只有小寫字母,那么我們就可以對一個字符串逐個字符進(jìn)行處理,只處理小寫字母,那么如何判斷一個字符是小寫字母呢,當(dāng)然是用 ascii 碼了,使用 linux 或者 mac os (實際上也為 linux 系統(tǒng))的朋友可以直接使用命令 man ascii 查看字符 ascii 碼對應(yīng)值:

         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)方法,如果您有什么別的辦法,可以盡情評論指教,如果讀者覺得該方法有什么不妥之后,也可隨時指正。

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 诸暨市| 江阴市| 波密县| 余干县| 瑞金市| 合肥市| 黄陵县| 黔南| 镶黄旗| 西丰县| 莱芜市| 嵩明县| 台南县| 高淳县| 区。| 长白| 弥勒县| 巴南区| 元阳县| 徐水县| 息烽县| 简阳市| 资源县| 道真| 南和县| 赤壁市| 弥渡县| 凯里市| 乐至县| 汉寿县| 色达县| 夏河县| 伊春市| 桐乡市| 抚松县| 罗田县| 来凤县| 宜阳县| 德格县| 岗巴县| 米易县|