问问题
986 次
1 回答
1
尝试使用此功能(或类似的想法......)首先将全角(“日语”)字母转换为半角(这是我们每天看到的普通字母)。希望这可以帮助。:)
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 中不存在的一些特殊有趣字符。
所以如果我们把它们放在一起,结果就会出现。
于 2013-07-20T14:49:01.220 回答