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与字符的转换函数:
<span> 1</span> <span>/*</span><span>* </span><span> 2</span> <span> * 将unicode转换成字符 </span><span> 3</span> <span> * @param int $unicode </span><span> 4</span> <span> * @return string UTF-8字符 </span><span> 5</span> <span> *</span><span>*/</span> <span> 6</span> <span>function</span> unicode2Char(<span>$unicode</span><span>){ </span><span> 7</span> <span>if</span>(<span>$unicode</span> < 128) <span>return</span> <span>chr</span>(<span>$unicode</span><span>); </span><span> 8</span> <span>if</span>(<span>$unicode</span> < 2048) <span>return</span> <span>chr</span>((<span>$unicode</span> >> 6) + 192) . <span> 9</span> <span>chr</span>((<span>$unicode</span> & 63) + 128<span>); </span><span>10</span> <span>if</span>(<span>$unicode</span> < 65536) <span>return</span> <span>chr</span>((<span>$unicode</span> >> 12) + 224) . <span>11</span> <span>chr</span>(((<span>$unicode</span> >> 6) & 63) + 128) . <span>12</span> <span>chr</span>((<span>$unicode</span> & 63) + 128<span>); </span><span>13</span> <span>if</span>(<span>$unicode</span> < 2097152) <span>return</span> <span>chr</span>((<span>$unicode</span> >> 18) + 240) . <span>14</span> <span>chr</span>(((<span>$unicode</span> >> 12) & 63) + 128) . <span>15</span> <span>chr</span>(((<span>$unicode</span> >> 6) & 63) + 128) . <span>16</span> <span>chr</span>((<span>$unicode</span> & 63) + 128<span>); </span><span>17</span> <span>return</span> <span>false</span><span>; </span><span>18</span> <span> } </span><span>19</span> <span>20</span> <span>/*</span><span>* </span><span>21</span> <span> * 将字符转换成unicode </span><span>22</span> <span> * @param string $char 必须是UTF-8字符 </span><span>23</span> <span> * @return int </span><span>24</span> <span> *</span><span>*/</span> <span>25</span> <span>function</span> char2Unicode(<span>$char</span><span>){ </span><span>26</span> <span>switch</span> (<span>strlen</span>(<span>$char</span><span>)){ </span><span>27</span> <span>case</span> 1 : <span>return</span> <span>ord</span>(<span>$char</span><span>); </span><span>28</span> <span>case</span> 2 : <span>return</span> (<span>ord</span>(<span>$char</span>{1}) & 63) | <span>29</span> ((<span>ord</span>(<span>$char</span>{0}) & 31) << 6<span>); </span><span>30</span> <span>case</span> 3 : <span>return</span> (<span>ord</span>(<span>$char</span>{2}) & 63) | <span>31</span> ((<span>ord</span>(<span>$char</span>{1}) & 63) << 6) | <span>32</span> ((<span>ord</span>(<span>$char</span>{0}) & 15) << 12<span>); </span><span>33</span> <span>case</span> 4 : <span>return</span> (<span>ord</span>(<span>$char</span>{3}) & 63) | <span>34</span> ((<span>ord</span>(<span>$char</span>{2}) & 63) << 6) | <span>35</span> ((<span>ord</span>(<span>$char</span>{1}) & 63) << 12) | <span>36</span> ((<span>ord</span>(<span>$char</span>{0}) & 7) << 18<span>); </span><span>37</span> <span>default</span> : <span>38</span> <span>trigger_error</span>('Character is not UTF-8!', <span>E_USER_WARNING</span><span>); </span><span>39</span> <span>return</span> <span>false</span><span>; </span><span>40</span> <span> } </span><span>41</span> }
2. 全角转半角
<span> 1</span> <span>/*</span><span>* </span><span> 2</span> <span> * 全角转半角 </span><span> 3</span> <span> * @param string $str </span><span> 4</span> <span> * @return string </span><span> 5</span> <span> *</span><span>*/</span> <span> 6</span> <span>function</span> sbc2Dbc(<span>$str</span><span>){ </span><span> 7</span> <span>return</span> <span>preg_replace</span><span>( </span><span> 8</span> <span>//</span><span> 全角字符 </span> <span> 9</span> '/[\x{3000}\x{ff01}-\x{ff5f}]/ue', <span>10</span> <span>//</span><span> 编码转换 </span><span>11</span> <span> // 0x3000是空格,特殊处理,其他全角字符编码-0xfee0即可以转为半角</span> <span>12</span> '($unicode=char2Unicode(\'\0\')) == 0x3000 ? " " : (($code=$unicode-0xfee0) > 256 ? unicode2Char($code) : chr($code))', <span>13</span> <span>$str</span> <span>14</span> <span> ); </span><span>15</span> }
3. 半角转全角
<span> 1</span> <span>/*</span><span>* </span><span> 2</span> <span> * 半角转全角 </span><span> 3</span> <span> * @param string $str </span><span> 4</span> <span> * @return string </span><span> 5</span> <span> *</span><span>*/</span> <span> 6</span> <span>function</span> dbc2Sbc(<span>$str</span><span>){</span> <span> 7</span> <span>return</span> <span>preg_replace</span><span>( </span><span> 8</span> <span>//</span><span> 半角字符 </span> <span> 9</span> '/[\x{0020}\x{0020}-\x{7e}]/ue', <span>10</span> <span>//</span><span> 编码转换 </span><span>11</span> <span> // 0x0020是空格,特殊处理,其他半角字符编码+0xfee0即可以转为全角</span> <span>12</span> '($unicode=char2Unicode(\'\0\')) == 0x0020 ? unicode2Char(0x3000) : (($code=$unicode+0xfee0) > 256 ? unicode2Char($code) : chr($code))', <span>13</span> <span>$str</span> <span>14</span> <span> ); </span><span>15</span> }
四、测试
示例代码:
<span>1</span> <span>$a</span> = 'abc12 345'<span>; </span><span>2</span> <span>$sbc</span> = dbc2Sbc(<span>$a</span><span>); </span><span>3</span> <span>$dbc</span> = sbc2Dbc(<span>$sbc</span><span>); </span><span>4</span> <span>5</span> <span>var_dump</span>(<span>$a</span>, <span>$sbc</span>, <span>$dbc</span>);
结果:
<span>1</span> <span>string</span>(9) "abc12 345" <span>2</span> <span>string</span>(27) "abc12 345" <span>3</span> <span>string</span>(9) "abc12 345"

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

全角和半角的区别:1、字符的占用空间;2、字符的表示;3、输入法的状态;4、本质区别;5、系统命令的使用。详细介绍:1、字符的占用空间,全角字符占用两个标准字符位置,而半角字符占用一个标准字符位置;2、字符的表示,全角指的是一个字符占用两个标准字符位置,不论是汉字还是其他类型的字符,而半角则是指一个字符占用一个标准的字符位置,通常用于英文字母、数字和符号等等。

在日常生活中,我们经常会遇到全角和半角的问题,但可能很少有人深入了解它们的含义和区别。全角和半角,实际上是一种字符编码方式的概念,而在电脑输入、编辑、排版等方面都有其特殊的应用。本文将深入探讨全角和半角的区别、切换技巧以及在实际生活中的应用。首先,全角和半角在汉字文字领域中的定义是:一个全角字符占用一个字符位置,而一个半角字符占用半个字符位置。在计算机中,通

全角半角是指中文输入法中的两种不同输入状态。全角是指每个字符占用一个全角字符位置,而半角则是每个字符占用一个半角字符位置。在使用电脑输入中文时,有时候需要在全角和半角之间进行切换,以适应不同的输入场景。接下来我们就来介绍几种常用的全角半角切换方法,让大家轻松学会如何在中文输入中进行全角半角的切换。方法一:使用快捷键切换全角半角在大多数中文输入法软件中,可以使

我们在使用中文输入法打字的时候,会有全角和半角两种方式,在这其中还有很多的小伙伴不是很了解全角和半角有什么区别,那下面就来看一下输入法全角和半角的区别吧。半角状态下可以使用任何标点符号,对于空格也没有特殊限制。而在全角状态下,空格键的作用有所变化。切换至全角状态后,按下空格键,我们会发现字符之间的距离变得很大,与半角状态相比,这种间隔更为明显。此外,在全角状态下,英文字母的显示也有所不同。在半角状态下,打出的英文字母大小正常。然而,一旦切换至全角状态,我们会发现打出的英文字母变得加粗且放大。在全

在现代的互联网时代,我们经常会在电脑上进行文字输入和编辑工作。在这个过程中,我们有时候会遇到全角和半角的切换问题。全角和半角是指字符所占据的位置大小,全角字符占用一个字符宽度,而半角字符占用半个字符宽度。正确使用全角和半角对于保证文本的格式规范和统一非常重要。因此,掌握全角半角的切换技巧是很有必要的。首先,让我们来了解一下全角和半角的概念。全角字符一般指的是

全角空格和半角空格是在中文和日文中常见的两种空格字符,它们在排版、文本编辑以及输入法中具有不同的功能特点。本文将分别详细解释全角空格和半角空格的特点及应用场景,帮助读者更好地理解和使用这两种空格字符。首先,我们先来了解全角空格的特点。全角空格在Unicode中的编码是U+3000,宽度与一般的中文字符相同,通常用于中文排版中的空白处。全角空格的使用场景包括但

在用户平时运用输入法进行文字插入时,可能会察觉到字母或符号间存在差异,这主要是由于半角与全角符的不同切换导致。这里,将为你详细介绍如何快捷地实现全角与半角之间的转换。windows中全角与半角之间的切换快捷键解决方案一:Alt+Shift此为最常用的全角与半角输入模式切换键。在中文输入环境时,按下此键即转为英语模式,反之则切换至中文状态。若计算机上安装有多语种输入法,同样可通过此键轻松地在各输入法间自由切换。解决方案二:Ctrl+Shift同属全角半角切换快捷键之列。该组合键在英文输入模式下按下

标题:如何在输入法中轻松切换全角和半角模式在日常使用电脑时,我们常常需要在全角和半角之间进行切换,以适应不同的输入场景和需求。全角模式一般用于输入汉字、英文字符、标点符号和数字等,而半角模式则更适合输入英文和数字。然而,很多人在使用输入法时可能会感到困惑,不知道如何轻松地在全角和半角之间进行切换。本文将介绍一些简单的方法,帮助大家轻松地在输入法中切换全角和半
