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); }
全角与半角之区别(来自中文维基百科)
全角,又称全形、全宽,是电脑字符的一种格式,字面意思是比普通字符(或半角字符)宽的字符。
传统上,英语或拉丁字母语言使用一字节的空间来存储,而汉字、日语等常使用两字节存储,在使用固定宽度文字的地方,为了使字体看起来整齐,英文字母、数字及其他符号,也由原来只占用一个字空间,改为一概占用两个字的空间来显示,并且使用两个字节来存储。
以上所述就是本文的全部内容了,希望大家能够喜欢。