PHP 全角转半角实现代码


  本文标签:PHP,全角,半角

复制代码 代码如下:

/**
* 将一个字串中含有全角的数字字符、字母、空格或%+-()字符转换为相应半角字符
* @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
$str = "0123ABCDFWS\",.?<>{}[]*&^%#@!~()+-|:;";
echo "$str";
echo "<br />";
$str = preg_replace(/\xa3([\xa1-\xfe])/e, chr(ord(\1)-0x80), $str);
echo $str;
?>


另外为大家分享一个函数

在许多收集用户信息的表单里,期望用户输入的是半角字符,但是无论你如何强调,如何提醒,还是会有粗心的用户提交全角数据,其实,在一些新手眼中,全角和半角根本就没有区别,甚至他们会觉得:我提交的明明是正确的信息,为什么会提示错误呢?

实际上,全角和半角有一一对应关系,而大多数用户并非故意输入错误的信息,所以,我们可以通过程序来避免这种情况的发生,最多,可以在转换后给用户一个确认的机会,这样,或许能够给用户一个更好的体验 。

下面介绍一个函数,实现字符 半角 和 全角 之间的互转 。

复制代码 代码如下:

<?php
header("Content-type: text/html; charset=utf-8");

// 第一个参数:传入要转换的字符串
// 第二个参数:取0,半角转全角;取1,全角到半角
function SBC_DBC($str, $args2) {
    $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 ($args2 == 0) {
        return str_replace($SBC, $DBC, $str);  // 半角到全角
    } else if ($args2 == 1) {
        return str_replace($DBC, $SBC, $str);  // 全角到半角
    } else {
        return false;
    }
}

$str1 = "http://www.jb51.net/ - 脚本之家";
$str2 = "http://JB51.net/ - 脚本之家";

echo "半角 转 全角:<br />";
echo $str1 . -> . SBC_DBC($str1, 0);

echo "<br /><br />全角 转 半角:<br />";
echo $str2 . -> . SBC_DBC($str2, 1);
?>