尝试使用这个函数(或类似的想法......)将 fullwidth(“日语”)字母转换为 halfwidth(这是我们的普通字母)每天见)第一。希望这可以帮助。 :)
function makeSemiWidth($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
function makeSemiWidth($str,$args2=1) { //halfwidth <-> fullwidth conversion function, set the 2nd parameter to 0 for converting halfwidth (English) to fullwidth (Japanese); set it to 1 for converting fullwidth to halfwidth
$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( //halfwidth
'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); //halfwidth -> fullwidth
if($args2==1)
return str_replace($DBC,$SBC,$str); //fullwidth -> halfwidth
else
return false;
}
/*
$str = "alskdf";
echo $str;
echo "<br>";
echo makeSemiWidth($str,0);
echo makeSemiWidth($str,1);
*/
?>
您可能还想使用正则表达式来做到这一点,
$str = preg_replace('/\xa3([\xa1-\xfe])/e', 'chr(ord(\1)-0x80)', $str);
\xa3[\xa1-\xfe] 代表GB2312全角(“日文”)字符集,我们取它并把第2个字节减去0x80(十进制的128),得到对应的半角字符(我们正常英文)。
但是,使用 UTF-8 编码,它有时会不起作用。因此,我们需要先将其转换为 GBK,为此,请使用以下代码,
$str = iconv('utf-8', 'gbk//IGNORE', $str);
//IGNORE用于忽略一些在UTF-8中存在但在GBK中不存在的特殊搞笑字符。
所以如果我们把它们放在一起,结果就会出现。