PHP全角和半角字符怎么区分,php字符串处理之全角半角转换,php字符串全角半角_PHP教程...
php字符串处理之全角半角转换,php字符串全角半角
半角全角的处理是字符串处理的常见问题,本文尝试为大家提供一个思路。
一、概念
全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)
空格比较特殊,全角为 12288(0x3000),半角为 32 (0x20)
而且除空格外,全角/半角按unicode编码排序在顺序上是对应的
所以可以直接通过用+-法来处理非空格数据,对空格单独处理
二、实现思路
1. 找到目标unicode的字符,可以使用正则表达式解决
2. 修改unicode编码
三、实现
1. 首先是两个unicode与字符的转换函数:
1 /**2 * 将unicode转换成字符3 * @param int $unicode4 * @return string UTF-8字符5 **/
6 function unicode2Char($unicode){7 if($unicode < 128) return chr($unicode);8 if($unicode < 2048) return chr(($unicode >> 6) + 192) .
9 chr(($unicode & 63) + 128);10 if($unicode < 65536) return chr(($unicode >> 12) + 224) .
11 chr((($unicode >> 6) & 63) + 128) .
12 chr(($unicode & 63) + 128);13 if($unicode < 2097152) return chr(($unicode >> 18) + 240) .
14 chr((($unicode >> 12) & 63) + 128) .
15 chr((($unicode >> 6) & 63) + 128) .
16 chr(($unicode & 63) + 128);17 return false;18 }19
20 /**21 * 将字符转换成unicode22 * @param string $char 必须是UTF-8字符23 * @return int24 **/
25 function char2Unicode($char){26 switch (strlen($char)){27 case 1 : return ord($char);28 case 2 : return (ord($char{1}) & 63) |
29 ((ord($char{0}) & 31) << 6);30 case 3 : return (ord($char{2}) & 63) |
31 ((ord($char{1}) & 63) << 6) |
32 ((ord($char{0}) & 15) << 12);33 case 4 : return (ord($char{3}) & 63) |
34 ((ord($char{2}) & 63) << 6) |
35 ((ord($char{1}) & 63) << 12) |
36 ((ord($char{0}) & 7) << 18);37 default :
38 trigger_error('Character is not UTF-8!', E_USER_WARNING);39 return false;40 }41 }
2. 全角转半角
1 /**2 * 全角转半角3 * @param string $str4 * @return string5 **/
6 function sbc2Dbc($str){7 return preg_replace(8 //全角字符
9 '/[x{3000}x{ff01}-x{ff5f}]/ue',
10 //编码转换11 // 0x3000是空格,特殊处理,其他全角字符编码-0xfee0即可以转为半角
12 '($unicode=char2Unicode('')) == 0x3000 ? " " : (($code=$unicode-0xfee0) > 256 ? unicode2Char($code) : chr($code))',
13 $str
14 );15 }
3. 半角转全角
1 /**2 * 半角转全角3 * @param string $str4 * @return string5 **/
6 function dbc2Sbc($str){
7 return preg_replace(8 //半角字符
9 '/[x{0020}x{0020}-x{7e}]/ue',
10 //编码转换11 // 0x0020是空格,特殊处理,其他半角字符编码+0xfee0即可以转为全角
12 '($unicode=char2Unicode('')) == 0x0020 ? unicode2Char(0x3000) : (($code=$unicode+0xfee0) > 256 ? unicode2Char($code) : chr($code))',
13 $str
14 );15 }
四、测试
示例代码:
1 $a = 'abc12 345';2 $sbc = dbc2Sbc($a);3 $dbc = sbc2Dbc($sbc);4
5 var_dump($a, $sbc, $dbc);
结果:
1 string(9) "abc12 345"
2 string(27) "abc12 345"
3 string(9) "abc12 345"
www.bkjia.comtrueTechArticlephp字符串处理之全角半角转换,php字符串全角半角 半角全角的处理是字符串处理的常见问题,本文尝试为大家提供一个思路。 一、概念 全…
PHP全角和半角字符怎么区分,php字符串处理之全角半角转换,php字符串全角半角_PHP教程...相关推荐
- PHP全角和半角字符怎么区分,学习猿地-php如何实现全角符号转半角
php实现全角符号转半角的方法:首先创建一个PHP示例文件:然后定义一个"SBC_DBC($str,$args2=1) {...}"方法:最后通过"str_replace ...
- php 半角全角转换,php 把全角字符转换成半角
经常遇到用户把英文字符或者标点符号写成了全角,有时候会导致系统无法识别,所以应该先把全角的字符全部转换成正常的半角,减少问题存在.其实原理很简单,也很笨吧,就是把所有的全角字符替换成对应的半角字符,摘 ...
- C#实现全角字符和半角字符转换
本文转自: http://blog.csdn.net/wangchao1982/article/details/1857444,写的很好,直接转了,谢谢! 很多的朋友都在学习和工作中遇到过全角和半角的 ...
- php区分全角半角字符,php如何判断是字符串全角还是半角
php如何判断是字符串全角还是半角 关注:168 答案:2 手机版 解决时间 2021-01-15 16:08 提问者夏日╮悲歌 2021-01-15 00:27 php如何判断是字符串全角还是半 ...
- SQL Server中全角和半角字符的比较问题
/*------------------------------------------------------------------------------------ /*欢迎转载,请保留本声明 ...
- Windows10系统自带输入法如何切换全角/半角字符
有些时候因为测试需要,所以需要区分输入的全角字符和半角字符. 全角字符是指一个字符占据俩个标准字符的位置. 半角字符是指一个字符占据一个标准字符的位置. 一个字符是一个字节. 一个字节是8个比特位. ...
- WordVBA:半角字符转为全角字符(结合查找方法)
目 录 一.应用场景 二.推荐的手动操作步骤 (一)打开Word[查找替换]对话框的[查找]选项,输入相应匹配模式 (二)第(一)步完成,符合匹配模式的地方就被选中了 (三)点击[字体]-[转换]选项 ...
- Java全角、半角字符的关系以及转换
如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...
- java 全角_Java全角、半角字符的关系以及转换
如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...
最新文章
- 在Ubuntu 16.04.5 LTS上使用python第三方库QRCode 6.0生成二维码实录
- 视频工具ffmpeg
- 无副作用、效果超越吗啡!用微电极精准管理大脑“疼痛中心”,科学家探索止痛新方法...
- oracle 导入流程,Oracle数据库(旧)空间数据表创建与数据导入流程说明V2.0
- python中head_python学习笔记[headfirst]
- 突然讨厌做前端,讨厌代码_为什么用户讨厌重新设计
- hibernate中的id特殊属性hilo剖解(多用于继承关系)
- 毕业了去哪里工作,一位毕业多年北漂人的经验感悟
- java微信公众号支付示例
- Gaussian Mixture Model
- flash 绘图API:绘制秀曲线图形
- I/O模型+Nginx基本配置
- c语言编程绝对质数,C语言《绝对素数》
- 浙里办接入流程(施工完毕)
- X310工作原理及设备描述详细信息
- 100个python算法超详细讲解2.1:三色球
- 如何实现搜索附近的店铺
- 用ESP8266_RTOS_SDK v3的I2C控制电容传感器FDC2214
- 研究生工作周报(第十三周)
- 大公司的内部创业,寻求新的增长动能