PHP实现全角字符转为半角方法汇总


Posted in PHP onJuly 09, 2015

最简单的方法

<?php  
$str = "0123ABCDFWS\",.?<>{}[]*&^%#@!~()+-|:;";  
echo "$str";  
echo "<br />";  
$str = preg_replace('/\xa3([\xa1-\xfe])/e', 'chr(ord(\1)-0x80)', $str);  
echo $str;

这是网上看来的代码,所有的中文标点的第二个字节减去0X80(即128)所得的数字就是半角所得的数字了。而/e模式表达的是:如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。

在非UTF-8模式下这个函数是可行的,但是UTF-8下 这个方法就似乎无效,

方法二:

$queue = Array('0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', 
'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E', 'F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I', 'J' => 'J', 
'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N', 'O' => 'O', 'P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T', 
'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X', 'Y' => 'Y', 'Z' => 'Z', 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd', 
'e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i', 'j' => 'j', 'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n', 
'o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's', 't' => 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x', 
'y' => 'y', 'z' => 'z');
echo preg_replace_callback("/([\xEF][\xBC][\x90-\x99]|[\xEF][\xBD][\x81-\x9A\xA1-\xBA])/", 'next_fchar', '0');
function next_fchar($matches){
 global $queue;
 return $queue[$matches[1]];
}

方法三:

/**
* 字符串半角和全角间相互转换
* @param string $str 待转换的字符串
* @param int  $type TODBC:转换为半角;TOSBC,转换为全角
* @return string 返回转换后的字符串
*/
function convertStrType($str, $type) {

    $dbc = array( 
      '0' , '1' , '2' , '3' , '4' , 
      '5' , '6' , '7' , '8' , '9' , 
      'A' , 'B' , 'C' , 'D' , 'E' , 
      'F' , 'G' , 'H' , 'I' , 'J' , 
      'K' , 'L' , 'M' , 'N' , 'O' , 
      'P' , 'Q' , 'R' , 'S' , 'T' , 
      'U' , 'V' , 'W' , 'X' , 'Y' , 
      'Z' , 'a' , 'b' , 'c' , 'd' , 
      'e' , 'f' , 'g' , 'h' , 'i' , 
      'j' , 'k' , 'l' , 'm' , 'n' , 
      'o' , 'p' , 'q' , 'r' , 's' , 
      't' , 'u' , 'v' , 'w' , 'x' , 
      'y' , 'z' , '-' , ' ' , ':' ,
      '.' , ',' , '/' , '%' , '#' ,
      '!' , '@' , '&' , '(' , ')' ,
      '<' , '>' , '"' , ''' , '?' ,
      '[' , ']' , '{' , '}' , '\' ,
      '|' , '+' , '=' , '_' , '^' ,
      '¥' , ' ̄' , '`'

);

    $sbc = array( //半角
      '0', '1', '2', '3', '4', 
      '5', '6', '7', '8', '9', 
      'A', 'B', 'C', 'D', 'E', 
      'F', 'G', 'H', 'I', 'J', 
      'K', 'L', 'M', 'N', 'O', 
      'P', 'Q', 'R', 'S', 'T', 
      'U', 'V', 'W', 'X', 'Y', 
      'Z', 'a', 'b', 'c', 'd', 
      'e', 'f', 'g', 'h', 'i', 
      'j', 'k', 'l', 'm', 'n', 
      'o', 'p', 'q', 'r', 's', 
      't', 'u', 'v', 'w', 'x', 
      'y', 'z', '-', ' ', ':',
      '.', ',', '/', '%', ' #',
      '!', '@', '&', '(', ')',
      '<', '>', '"', '\'','?',
      '[', ']', '{', '}', '\\',
      '|', '+', '=', '_', '^',
      '¥','~', '`'

);
if($type == 'TODBC'){
return str_replace( $sbc, $dbc, $str ); //半角到全角
}elseif($type == 'TOSBC'){
return str_replace( $dbc, $sbc, $str ); //全角到半角
}else{
return $str;
}
}

方法四:

/**
* 将一个字串中含有全角的数字字符、字母、空格或'%+-()'字符转换为相应半角字符
*
* @access public
* @param string $str 待转换字串
*
* @return string $str 处理后字串
*/
function make_semiangle($str)
{
$arr = array('0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4',
'5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E',
'F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I', 'J' => 'J',
'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N', 'O' => 'O',
'P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T',
'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X', 'Y' => 'Y',
'Z' => 'Z', 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd',
'e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i',
'j' => 'j', 'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n',
'o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's',
't' => 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x',
'y' => 'y', 'z' => 'z',
'(' => '(', ')' => ')', '〔' => '[', '〕' => ']', '【' => '[',
'】' => ']', '〖' => '[', '〗' => ']', '“' => '[', '”' => ']',
'‘' => '[', ''' => ']', '{' => '{', '}' => '}', '《' => '<',
'》' => '>',
'%' => '%', '+' => '+', '—' => '-', '-' => '-', '~' => '-',
':' => ':', '。' => '.', '、' => ',', ',' => '.', '、' => '.',
';' => ',', '?' => '?', '!' => '!', '…' => '-', '‖' => '|',
'”' => '"', ''' => '`', '‘' => '`', '|' => '|', '〃' => '"',
' ' => ' ');
return strtr($str, $arr);
}

全角与半角之区别(来自中文维基百科)

全角,又称全形、全宽,是电脑字符的一种格式,字面意思是比普通字符(或半角字符)宽的字符。

传统上,英语或拉丁字母语言使用一字节的空间来存储,而汉字、日语等常使用两字节存储,在使用固定宽度文字的地方,为了使字体看起来整齐,英文字母、数字及其他符号,也由原来只占用一个字空间,改为一概占用两个字的空间来显示,并且使用两个字节来存储。

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
php 页面执行时间计算代码
Dec 04 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
如何使用php判断所处服务器操作系统的类型
Jun 20 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
PHP实现HTML生成PDF文件的方法
Nov 07 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
php实现的中文分词类完整实例
Feb 06 PHP
php使用include 和require引入文件的区别
Feb 16 PHP
php实现socket推送技术的示例
Dec 20 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 PHP
php将金额数字转化为中文大写
Jul 09 #PHP
php实现的简易扫雷游戏实例
Jul 09 #PHP
php链表用法实例分析
Jul 09 #PHP
php结合curl实现多线程抓取
Jul 09 #PHP
php基本函数汇总
Jul 09 #PHP
php+curl 发送图片处理代码分享
Jul 09 #PHP
在Debian系统下配置LNMP的教程
Jul 09 #PHP
You might like
Terran兵种介绍
2020/03/14 星际争霸
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
php静态文件生成类实例分析
2015/01/03 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
功能强大的php文件上传类
2016/08/29 PHP
php json相关函数用法示例
2017/03/28 PHP
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
Python 模板引擎的注入问题分析
2017/01/01 Python
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
Python中print和return的作用及区别解析
2019/05/05 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
新闻专业毕业生求职信
2014/08/08 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python