


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"

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

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

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

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

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

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

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

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


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 English version
Recommended: Win version, supports code prompts!

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)
