之前试过网上找的通过ASCII之类的字符替换,发现很多莫名其妙的问题。最后还是换成下面的字符替换方式了,把目前能找到的所有全角都列出来了一个个替换吧
复制代码 代码如下:
/**
* 全角字符转换为半角
*
* @param string $str
* @return string
*/
public function Sbc2Dbc($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);
}