前言

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

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

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

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 码对应值:

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 之间,由此可得出我们的程序:

= 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"

大写转小写同理可得,不再赘述,完整两个方法的代码及使用,可下载:http://download.csdn.net/detail/agangdi/8171599

当然了,编程是一门艺术,同一个功能有多种多样的实现方法,如果您有什么别的办法,可以尽情评论指教,如果读者觉得该方法有什么不妥之后,也可随时指正。

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

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

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

  2. C语言进制的格式字符,GB汉字文件转换成C语言Unicode十六进制字符串格式

    可以用在编程环境只能用GB,但程序中的汉字字符串需要用C语言的Unicode十六进制字符串格式表示.可以先在字符串中直接输入汉字,再用此程序转换. 源代码用C# //ascii & GB to ...

  3. html案例字符串大小写转换,将字符串大写字母变小写 c语言编程:字符串中大小写字母转换...

    java怎样将大写字母转换成小写字母 具体代码如下,字符串中大.小写互转 1)输入 第一行只有一个整数m(m jquery 字符串大写字母转小写 js字符转换成小写的方法:toLowerCase()j ...

  4. Java 字符串常用操作(比较、查找位置、删除字符、替换字符串、反向输出、是否存在、分割字符串、大小写转换,区域比较、拼接字符串)

    字符串比较 public class StringCompareEmp{public static void main(String args[]){String str = "Hello ...

  5. Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    文章目录 前言 简述 ASCII GBK Unicode UTF-8 应用场景 开发环境 编码转换 16进制数值转换为16进制字符 16进制数值转化为字符串 16进制字符串转换为Unicode字符串 ...

  6. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)

    参考博客: Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围 ...

  7. python utf-8编码转换中文_python实现unicode转中文及转换默认编码的方法

    本文实例讲述了python实现unicode转中文及转换默认编码的方法.分享给大家供大家参考,具体如下: 一.在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77e ...

  8. 字符ascii码值转换_没想到 Unicode 字符还能这样玩?

    脚本之家 你与百万开发者在一起 来源 | 程序通事(ID:US_stocks) 如若转载请联系原公众号 上周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞. 图片来自网络 ...

  9. python文件编码转换工具_python实现unicode转中文及转换默认编码的方法

    本文实例讲述了python实现unicode转中文及转换默认编码的方法.分享给大家供大家参考,具体如下: 一.在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77e ...

最新文章

  1. 保护站点上已存在另一个具有相同实例 UUID的虚拟机_LoadRunner性能测试系统学习教程:工具介绍(上)...
  2. “一切都是消息”--iMSF(即时消息服务框架)入门简介
  3. VMware下centos7安装VMware Tools
  4. 常用命令-临时记录!
  5. Acwing第 40 场周赛【完结】
  6. 数据结构与算法 | 带头双向循环链表
  7. 关于星空的java小程序_[Java教程]小程序使用Canvas画饼图_星空网
  8. JVM(三)——对象的访问定位
  9. 拥抱变化——从Atlas到ASP.NET AJAX(4):大大简化的了的Extender扩展器控件
  10. 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)
  11. tql触发器修改记录时同步更新_运维日记|MySQL数据单向同步方案对比
  12. centos普通用户修改文件权限_centos6.5下修改文件夹权限和用户名用户组
  13. 【CASS精品教程】CASS 9.2绘制地籍图详细实验案例教程
  14. php 微信小程序签到功能,微信小程序每日签到
  15. shopex php5.3 无法安装,php版本导致shopex4.8.5安装的问题
  16. 为了寻找美,我决定对美女图片进行图像边缘化处理
  17. 超大日志文件分割方法
  18. 用了MybatisPlus后,我很久没有手写sql了
  19. 笔记本上的小键盘计算机怎样用,电脑怎么调出小键盘打字?电脑调出小键盘打字的方法...
  20. 绿色版本ps cs5 不能复制汉字【解决方法】

热门文章

  1. 大一计算机文化基础上机,计算机文化基础上机试题
  2. android 启动多个进程,Android开启多进程
  3. mysql桦仔_Microsoft SQL Server 2005技术内幕:T-SQL查询笔记
  4. javajs ---- 判断字符串中是否包含子串
  5. tabcontrol选项卡颜色把文字覆盖了_文字拆分神器,这3个PPT插件满足你的所有需求...
  6. python3.7.4安装pip_python3.7下pip的安装教程
  7. window10运行python弹出商店_解决 win10 命令行下运行 python 弹出 Windows 应用商店
  8. MyBatis Plus EntityWarpper参数的介绍
  9. Linux环境运行Jmeter
  10. vue修改Element的el-table样式