PHP 全角转半角实现代码
author:一佰互联 2019-04-30   click:145
复制代码 代码如下:
/**
* 将一个字串中含有全角的数字字符、字母、空格或"%+-()"字符转换为相应半角字符
* @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 = "//www.yx10011.com/ - 网页设计";
$str2 = "http://JB51.net/ - 网页设计";

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

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