PHP实现全角字符转为半角方法汇总
最简单的方法
<?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');
echopreg_replace_callback("/([\xEF][\xBC][\x90-\x99]|[\xEF][\xBD][\x81-\x9A\xA1-\xBA])/",'next_fchar','0');
functionnext_fchar($matches){
global$queue;
return$queue[$matches[1]];
}
方法三:
/**
*字符串半角和全角间相互转换
*@paramstring$str待转换的字符串
*@paramint$typeTODBC:转换为半角;TOSBC,转换为全角
*@returnstring返回转换后的字符串
*/
functionconvertStrType($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'){
returnstr_replace($sbc,$dbc,$str);//半角到全角
}elseif($type=='TOSBC'){
returnstr_replace($dbc,$sbc,$str);//全角到半角
}else{
return$str;
}
}
方法四:
/**
*将一个字串中含有全角的数字字符、字母、空格或'%+-()'字符转换为相应半角字符
*
*@accesspublic
*@paramstring$str待转换字串
*
*@returnstring$str处理后字串
*/
functionmake_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',
'('=>'(',')'=>')','〔'=>'[','〕'=>']','【'=>'[',
'】'=>']','〖'=>'[','〗'=>']','“'=>'[','”'=>']',
'‘'=>'[','''=>']','{'=>'{','}'=>'}','《'=>'<',
'》'=>'>',
'%'=>'%','+'=>'+','—'=>'-','-'=>'-','~'=>'-',
':'=>':','。'=>'.','、'=>',',','=>'.','、'=>'.',
';'=>',','?'=>'?','!'=>'!','…'=>'-','‖'=>'|',
'”'=>'"','''=>'`','‘'=>'`','|'=>'|','〃'=>'"',
''=>'');
returnstrtr($str,$arr);
}
全角与半角之区别(来自中文维基百科)
全角,又称全形、全宽,是电脑字符的一种格式,字面意思是比普通字符(或半角字符)宽的字符。
传统上,英语或拉丁字母语言使用一字节的空间来存储,而汉字、日语等常使用两字节存储,在使用固定宽度文字的地方,为了使字体看起来整齐,英文字母、数字及其他符号,也由原来只占用一个字空间,改为一概占用两个字的空间来显示,并且使用两个字节来存储。
以上所述就是本文的全部内容了,希望大家能够喜欢。