失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php amp 字符串处理 php字符串处理之全角半角转换

php amp 字符串处理 php字符串处理之全角半角转换

时间:2024-05-22 17:55:52

相关推荐

php amp 字符串处理 php字符串处理之全角半角转换

半角全角的处理是字符串处理的常见问题,本文尝试为大家提供一个思路。

一、概念

全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)

半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)

空格比较特殊,全角为 12288(0x3000),半角为 32 (0x20)

而且除空格外,全角/半角按unicode编码排序在顺序上是对应的

所以可以直接通过用+-法来处理非空格数据,对空格单独处理

二、实现思路

1. 找到目标unicode的字符,可以使用正则表达式解决

2. 修改unicode编码

三、实现

1. 首先是两个unicode与字符的转换函数:

/**

* 将unicode转换成字符

* @param int $unicode

* @return string UTF-8字符

**/

function unicode2Char($unicode){

if($unicode < 128) return chr($unicode);

if($unicode < 2048) return chr(($unicode >> 6) + 192) .

chr(($unicode & 63) + 128);

if($unicode < 65536) return chr(($unicode >> 12) + 224) .

chr((($unicode >> 6) & 63) + 128) .

chr(($unicode & 63) + 128);

if($unicode < 2097152) return chr(($unicode >> 18) + 240) .

chr((($unicode >> 12) & 63) + 128) .

chr((($unicode >> 6) & 63) + 128) .

chr(($unicode & 63) + 128);

return false;

}

/**

* 将字符转换成unicode

* @param string $char 必须是UTF-8字符

* @return int

**/

function char2Unicode($char){

switch (strlen($char)){

case 1 : return ord($char);

case 2 : return (ord($char{1}) & 63) |

((ord($char{0}) & 31) << 6);

case 3 : return (ord($char{2}) & 63) |

((ord($char{1}) & 63) << 6) |

((ord($char{0}) & 15) << 12);

case 4 : return (ord($char{3}) & 63) |

((ord($char{2}) & 63) << 6) |

((ord($char{1}) & 63) << 12) |

((ord($char{0}) & 7) << 18);

default :

trigger_error('Character is not UTF-8!', E_USER_WARNING);

return false;

}

}

2. 全角转半角

/**

* 全角转半角

* @param string $str

* @return string

**/

function sbc2Dbc($str){

return preg_replace(

// 全角字符

'/[\x{3000}\x{ff01}-\x{ff5f}]/ue',

// 编码转换

// 0x3000是空格,特殊处理,其他全角字符编码-0xfee0即可以转为半角

'($unicode=char2Unicode(\'\0\')) == 0x3000 ? " " : (($code=$unicode-0xfee0) > 256 ? unicode2Char($code) : chr($code))',

$str

);

}

3. 半角转全角

/**

* 半角转全角

* @param string $str

* @return string

**/

function dbc2Sbc($str){

return preg_replace(

// 半角字符

'/[\x{0020}\x{0020}-\x{7e}]/ue',

// 编码转换

// 0x0020是空格,特殊处理,其他半角字符编码+0xfee0即可以转为全角

'($unicode=char2Unicode(\'\0\')) == 0x0020 ? unicode2Char(0x3000) : (($code=$unicode+0xfee0) > 256 ? unicode2Char($code) : chr($code))',

$str

);

}

四、测试

示例代码:

$a = 'abc12 345';

$sbc = dbc2Sbc($a);

$dbc = sbc2Dbc($sbc);

var_dump($a, $sbc, $dbc);

结果:

string(9) "abc12 345"

string(27) "abc12345"

string(9) "abc12 345"

C&num;全角半角转换函数

Code#region 全角半角转换 /// /// 转全角的函数(SBC case) /// ///

C&num;全角半角转换输出解决方法

Microsoft.VisualBasic 命名空间 Strings 模块 StrConv 函数就具有大写/小写.全角/半角.中文简体/繁体等转换功能,字符串转换应该说是的强项,是这样的: ...

SQL 全角半角转换-(摘抄)

/****** SQL转换全角/半角函数 开始******/ CREATE FUNCTION ConvertWordAngle ( @str NVARCHAR(4000), --要转换的字符串 @fl ...

php 全角半角转换

java 全角半角转换函数

/** * 半角转全角 * @param input String. * @return 全角字符串. */ public static String ToSBC(String input) { ch ...

【python】 全角半角转换

以输入为GB18030编码字符串为例: #把全角字符串转半角 def tobanjiao(string): ustring = string.decode('GB18030') rstring = & ...

PHP全角半角转换函数

之前试过网上找的通过ASCII之类的字符替换,发现很多莫名其妙的问题.最后还是换成下面的字符替换方式了,把目前能找到的所有全角都列出来了一个个替换吧 /** * 全角字符转换为半角 * * @para ...

提供对字符串的全角-&gt&semi;半角,半角-&gt&semi;全角转换

package com.opslab.util.algorithmImpl; import com.opslab.util.StringUtil; /** * 提供对字符串的全角->半角,半角- ...

Java如何判断字符串中包含有全角&comma;半角符号

首先介绍下全角跟半角之间的区别: 在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角&quot ...

随机推荐

【iCore3 双核心板】例程二十二:LAN&lowbar;UDP实验——以太网数据传输

实验指导书及代码包下载: /s/1kTPlJMJ iCore3 购买链接: /item.htm?id=524229 ...

上次遗留下来的XMLUtil的问题

·在上周留下了一个关于XMLUtil的问题,问题大概是这样的,需要通过读取一个XML文件,然后在内存中生成一个对应的javaBean.之前写的那个很是糟糕,照着一个XML去写了一个"Util ...

js Dom树结构分析

对Dom数结构的理解,对用js操作html元素有很大的意义 先来看一下下面这段html代码:(这里就以分析body中的元素来解释,因为我们基本所有的操作基本都围绕body标签来做的)

AVFoundation--视频录制

// // ViewController.m // AVFoundationCameraRecording // // Created by ZhuYi on 16/5/3. // Copyright ...

hdu&lowbar;5104 Primes Problem&lpar;&rpar;

题目链接:http://acm./showproblem.php?pid=5104 rimes Problem Time Limit: 2000/1000 MS (Java/Oth ...

为 Debian 8 或 Debian 9(64 位)安装 &period;NET Core

在 Debian 8 或 Debian 9(64 位)上安装 .NET Core 的具体步骤: 备注:必须有用户控制目录,才能通过 tar.gz 在 Linux 系统上进行安装. 1.准备一台刚安装的 ...

NRF51822模块无法识别问题解决办法

我知道没图是没人看的,所以随便瞎截图了几张. 对于很多新手朋友们,或许可能还不是很了解jtag相关的一些调试所需的必须电路,就像很多人不喜欢用stm32的硬件i2c,而是喜欢软件io模拟,就算是使用了 ...

rand和srand的用法

首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数)表头文件: #include

&period;Net NPOI 上传excel文件、提交后台获取excel里的数据

1.导入NPOI.dll 2.添加类NPOIExcel.cs using System; using System.Collections.Generic; using System.Text; us ...

新系统centos7重启网络报错

场景: 在不知名云上新弄的centos7,改了IP之后启动不起来,使用systemctl status network查看结果如下: 排查过程: 1)NetworkManager是否关 ...

如果觉得《php amp 字符串处理 php字符串处理之全角半角转换》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。