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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
smarty 原来也不过如此~~呵呵
Nov 25 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
json的键名为数字时的调用方式(示例代码)
Nov 15 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 PHP
php中fsockopen用法实例
Jan 05 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
php实现URL加密解密的方法
Nov 17 PHP
php获取数据库结果集方法(推荐)
Jun 01 PHP
php apache开启跨域模式过程详解
Jul 08 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
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
php中adodbzip类实例
2014/12/08 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
Zend Framework开发入门经典教程
2016/03/23 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
js打造数组转json函数
2015/01/14 Javascript
JS解析XML实例分析
2015/01/30 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
倩碧美国官网:Clinique美国
2016/07/20 全球购物
市场营销专业个人自荐信格式
2013/09/21 职场文书
承诺书格式范文
2014/06/03 职场文书
擅自离岗检讨书
2014/09/12 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
Python实现聚类K-means算法详解
2022/07/15 Python