前言

网上流传着这么一个腾讯笔试题:

PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换。

举个例子,我们直接对中英文混排的字符串处理是会出乱码的,如:

1
2
3
4
php > $a 'abc中华ABC'
php > var_dump(strtoupper($a)); 
string(12) "ABCĸ?ō?ABC" 
php >

我们知道中文在 UTF8 编码里是由3个字符组成的,那么换个思路,我们可以把一个中文当成3个字符来处理,同理再换个思路,在一个把小写英文转换成大写英文的函数里,我们要处理 的只有小写字母,那么我们就可以对一个字符串逐个字符进行处理,只处理小写字母,那么如何判断一个字符是小写字母呢,当然是用 ascii 码了,使用 linux 或者 mac os (实际上也为 linux 系统)的朋友可以直接使用命令 man ascii 查看字符 ascii 码对应值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 之间,由此可得出我们的程序:

    <?php  function 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@#$%^&*(BMDJFDoalsdkfjasl
result string:string(39) "A中你继续F@#$%^&*(BMDJFDOALSDKFJASL"  

参考链接:https://www.cnblogs.com/wydchn/articles/4952205.html

转载于:https://www.cnblogs.com/lyFocus/p/8426949.html

php实现兼容Unicode文字的字符串大小写转换strtolower()和strtoupper()相关推荐

  1. php 兼容unicode文字的字符串大小写转换,php实现兼容Unicode文字的字符串大小写转换strtolower()和strtoupper()...

    前言 网上流传着这么一个腾讯笔试题: PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的 ...

  2. Java对于字符串的处理【String和int之间的转换、字符串拼接、字符串获取长度、字符串大小写转换、字符串去空格、字符串分割、字符串替换、字符串提取、字符串比较、字符串查找】

    文章目录 String字符串 和 整型int 的相互转换 String转化为int int 转换为 String 字符串拼接 使用连接运算符 "+" 使用 concat() 方法 ...

  3. python判断字符大小写转换_Python 字符串大小写转换的简单实例

    ①所有字母都转换为大写 # -*- coding:utf-8 -*- if __name__ == "__main__": a = 'hello, world!' print(a. ...

  4. python中字符串的使用04字符串大小写转换、删除空白字符

    python中字符串的使用04字符串大小写转换.删除空白字符 1.字符串的大小写转换 字符串的大小写转换就是将大写字母改为小写字母或者将小写字母改为大写字母.python中字符串大小写转换的方法有:用 ...

  5. Android Unicode与文本字符串互相转换

    Android Unicode与文本字符串互相转换 代码 完事 代码 kotlin /*** 补全length位,不够的在后面加0* @param str* @return*/fun upToNStr ...

  6. linux bash shell:最方便的字符串大小写转换(lowercase/uppercase conversion)

    关于字符串大小写转换,是写 linux 脚本经常干的事儿,所以总想找个方便的方法让我少打点字儿,搜索国内的中文资源,网上也能找到很多关于这个帖子,介绍的方法都差不多,用typeset是最简单的方法了, ...

  7. js字符串大小写转换

    js字符串大小写转换 语法 全部转换成大写 全部转换成小写 语法 toLowerCase() 和 toUpperCase() 方法可以改变大小写; 全部转换成大写 console.log('Inter ...

  8. 用JavaScript编写字符串大小写转换

    这里简单用到按钮的单击时间,根据用户传递参数的不同,完成字符串大小写的转换. 实现准备思想: 首先,编写一个text输入框,用来接受输入数据,当输入字符串为英文字母时,单击转大写按钮,就会在新数据的这 ...

  9. python unicode转字符串_Python: 在Unicode和普通字符串之间转换

    Unicode字符串可以用多种方式编码为普通字符串, 依照你所选择的编码(encoding):Toggle line numbers1 #将Unicode转换成普通的Python字符串:"编 ...

最新文章

  1. 基于OpenCV的实战:轮廓检测(附代码解析)
  2. 2014-07-04nbsp;22:24
  3. storm从入门到放弃(一),storm介绍
  4. Java Struts2 (一)
  5. 实例分析C语言中strlen和sizeof的区别
  6. java执行linux命令
  7. mongodb 入门 启动mongodb 无法启动 问题 非正常关闭
  8. mysql innodb 全表锁,Mysql InnoDB行锁及表锁分享
  9. python 生成器 generator
  10. 美丽的表格样式(使用CSS样式表控制表格样式)
  11. hltm连接css的link,CSS 链接(link)
  12. wine装通达信_linux下安装虚拟机,完美在linux系统下运行通达信软件
  13. 啦啦啦啦啦 报道 报道
  14. 2016 GDMS全球数字营销峰会在沪胜利召开
  15. 山寨 悟空遥控器的 方向键
  16. 6大应用,大象机器人双臂协作机器人,即将7月上市,一切就绪!
  17. 乌班图18下安装QQ
  18. 亚洲游戏行业遭遇史上最大DDoS攻击
  19. 大学生H5动画设计成品作业 —— 城市环保网
  20. 建筑设计用计算机要求高吗,建筑设计电脑怎么选?高配置性能是关键

热门文章

  1. TIP 2021 | 重访CV经典!首个无监督深度学习图像拼接框架
  2. 实验室设备测量超低偏置电流的实用技巧
  3. UICollectionView 右对齐的解决方案
  4. 前端模型--css动画(旋转八音盒)
  5. Java十年 十大组织
  6. Docker安装Redis方法
  7. C语言程序设计今天下雨了吗,C语言编程模拟下雨by张田浩.doc
  8. EasyCVR视频融合共享平台作为国标上级平台接入紫光华智云平台的流程解析
  9. 计算机安装操作步骤,重新安装计算机系统的步骤,最简单,最安全的操作!
  10. 配音兼职平台有那些,配音兼职靠谱的平台?