php实现兼容Unicode文字的字符串大小写转换strtolower()和strtoupper()
来源:互联网 发布:错生网络剧娟姐 编辑:程序博客网 时间:2024/05/18 02:46
前言
网上流传着这么一个腾讯笔试题:
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 之间,由此可得出我们的程序:
<?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"
当然了,编程是一门艺术,同一个功能有多种多样的实现方法,如果您有什么别的办法,可以尽情评论指教,如果读者觉得该方法有什么不妥之后,也可随时指正。
4 0
- php实现兼容Unicode文字的字符串大小写转换strtolower()和strtoupper()
- php实现兼容Unicode文字的字符串大小写转换strtolower()和strtoupper()
- PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换
- PHP 大小写转换函数 lcfirst ucfirst ucwords strtolower strtoupper
- PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会将汉字转换为乱码
- strtolower()和strtoupper()中文乱码问题
- php中的几个字符串操作函数strtoupper strtolower ucwords ucfirst lcfirst函数
- php strtoupper 和 array_change_key_case 字符串转大写,小写
- php 字符串大小写转换
- php 字符串大小写转换
- 给定字符串,实现大小写之间的转换
- swift方法实现字符串的大小写转换
- 用php实现 gb2312 和 unicode 间的编码转换
- 用php实现gb2312和unicode间的编码转换
- 用php实现gb2312和unicode间的编码转换
- 用php实现gb2312和unicode间的编码转换
- php转换字符串大小写函数
- PHP中字符串大小写转换
- LCD ic的帧率计算
- 数据库查询优化方案(处理上百万级记录如何提高处理查询速度)
- 模板之型别选择
- 【LeetCode】Best Time to Buy and Sell Stock
- Android Volley 详解 Google发布的一套用于网络通信的工具库
- php实现兼容Unicode文字的字符串大小写转换strtolower()和strtoupper()
- android自定义弹出框样式实现
- 安装mod_python后,apache2无法默认显示index
- mac 添加adb环境变量
- android sw_wdt流程
- BZOJ 3289 Mato的文件管理 莫队算法+树状数组
- Activiti 开发环境搭建
- C指针操作——获取字符串中所有数字
- 如何去掉ios8.1下的button下划线