PHP日语字符串与Unicode的比较

BluBb_mADe

我已经看到了多个与此问题有关的主题,但是没有一个主题在PHP中得到解决。我必须在数据库中找到一个字符串。问题是我要查找的字符串是日语编码的,即使它们相等也与数据库条目不匹配。

搜索字符串:

Free!

数据库中的字符串:

Free!

编辑:这两个字符串都以UTF-8编码。您可以清楚地看到它们之间的区别。是否有可能从这两个字符串中识别平等?

如果没有解决问题的编程方法,有人知道我可以用来手动转换字符串的字符数据库吗?

你好

BluBb_mADe

苗家ris

尝试使用此功能(或类似的想法...)首先将全角(“日语”)字母转换为半角(这是我们每天看到的普通字母)。希望这可以帮助。:)

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全角(“日语”)字符集,我们接受它并减去第二个字节0x80(十进制为128),这给出了相应的半角字符(我们的普通英语)。

但是,使用UTF-8编码有时将无法正常工作。因此,我们需要先将其转换为GBK,为此,请使用下面的代码,

$str = iconv('utf-8', 'gbk//IGNORE', $str); 

// IGNORE用于忽略UTF-8中存在的某些特殊的有趣字符,但GBK中不存在。

因此,如果我们将它们放在一起,结果将会到来。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章