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教程...相关推荐

  1. PHP全角和半角字符怎么区分,学习猿地-php如何实现全角符号转半角

    php实现全角符号转半角的方法:首先创建一个PHP示例文件:然后定义一个"SBC_DBC($str,$args2=1) {...}"方法:最后通过"str_replace ...

  2. php 半角全角转换,php 把全角字符转换成半角

    经常遇到用户把英文字符或者标点符号写成了全角,有时候会导致系统无法识别,所以应该先把全角的字符全部转换成正常的半角,减少问题存在.其实原理很简单,也很笨吧,就是把所有的全角字符替换成对应的半角字符,摘 ...

  3. C#实现全角字符和半角字符转换

    本文转自: http://blog.csdn.net/wangchao1982/article/details/1857444,写的很好,直接转了,谢谢! 很多的朋友都在学习和工作中遇到过全角和半角的 ...

  4. php区分全角半角字符,php如何判断是字符串全角还是半角

    php如何判断是字符串全角还是半角 关注:168  答案:2  手机版 解决时间 2021-01-15 16:08 提问者夏日╮悲歌 2021-01-15 00:27 php如何判断是字符串全角还是半 ...

  5. SQL Server中全角和半角字符的比较问题

    /*------------------------------------------------------------------------------------ /*欢迎转载,请保留本声明 ...

  6. Windows10系统自带输入法如何切换全角/半角字符

    有些时候因为测试需要,所以需要区分输入的全角字符和半角字符. 全角字符是指一个字符占据俩个标准字符的位置. 半角字符是指一个字符占据一个标准字符的位置. 一个字符是一个字节. 一个字节是8个比特位. ...

  7. WordVBA:半角字符转为全角字符(结合查找方法)

    目 录 一.应用场景 二.推荐的手动操作步骤 (一)打开Word[查找替换]对话框的[查找]选项,输入相应匹配模式 (二)第(一)步完成,符合匹配模式的地方就被选中了 (三)点击[字体]-[转换]选项 ...

  8. Java全角、半角字符的关系以及转换

    如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...

  9. java 全角_Java全角、半角字符的关系以及转换

    如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...

最新文章

  1. 在Ubuntu 16.04.5 LTS上使用python第三方库QRCode 6.0生成二维码实录
  2. 视频工具ffmpeg
  3. 无副作用、效果超越吗啡!用微电极精准管理大脑“疼痛中心”,科学家探索止痛新方法...
  4. oracle 导入流程,Oracle数据库(旧)空间数据表创建与数据导入流程说明V2.0
  5. python中head_python学习笔记[headfirst]
  6. 突然讨厌做前端,讨厌代码_为什么用户讨厌重新设计
  7. hibernate中的id特殊属性hilo剖解(多用于继承关系)
  8. 毕业了去哪里工作,一位毕业多年北漂人的经验感悟
  9. java微信公众号支付示例
  10. Gaussian Mixture Model
  11. flash 绘图API:绘制秀曲线图形
  12. I/O模型+Nginx基本配置
  13. c语言编程绝对质数,C语言《绝对素数》
  14. 浙里办接入流程(施工完毕)
  15. X310工作原理及设备描述详细信息
  16. 100个python算法超详细讲解2.1:三色球
  17. 如何实现搜索附近的店铺
  18. 用ESP8266_RTOS_SDK v3的I2C控制电容传感器FDC2214
  19. 研究生工作周报(第十三周)
  20. 大公司的内部创业,寻求新的增长动能

热门文章

  1. enumerate()使用介绍
  2. Java接入支付宝支付测试买iPhone13 pro max
  3. Ubuntu设置鼠标灵敏度
  4. 视频制作——由图片到视频
  5. 阿米巴经营管理模式是什么,能做什么,有什么好处和坏处?
  6. Elasticsearch-对象及Nest对象
  7. Langzi_eyes项目
  8. Linux系统启动报错No bootable device解决步骤
  9. 7 张图,轻松掌握零拷贝原理
  10. List集合转换成xml格式