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