我正在尝试将标准ASCII字母转换为其全角度日语等值字母。例如:
Game
变为Game
我搜索了一个答案,我发现这个question的答案很好,我在下面引用过:
$str = "Game some other text by ヴィックサ";
$str = preg_replace_callback(
"/[\x{ff01}-\x{ff5e}]/u",
function($c) {
// convert UTF-8 sequence to ordinal value
$code = ((ord($c[0][0])&0xf)<<12)|((ord($c[0][1])&0x3f)<<6)|(ord($c[0][2])&0x3f);
return chr($code-0xffe0);
},
$str);
但我想要反方向。我尝试在return statementm中将( - )符号更改为(+),但没有取得多大成功。
答案 0 :(得分:0)
使用PHP的mb_convert_kana
函数很简单。见http://php.net/manual/en/function.mb-convert-kana.php。您至少需要R
模式将“han-kaku”字母转换为“zen-kaku”。
答案 1 :(得分:0)
“ / [\ x {ff01}-\ x {ff5e}] / u”用于检测字母是否为全角。您必须先找到一个半角字母。因此,我更改为“ / [\ x {0021}-\ x {007e}] / u”。 Unicode表在这里http://jrgraphix.net/r/Unicode/0020-007F
第二个是我认为的编码/解码问题。 您已将UTF-8序列转换为序数值(ASCII码)。该chr()函数从ASCII返回字符。 ASCII没有全角字母。 因此,您必须从Unicode转换。
我首先使用ord()获得字符的ASCII码,并添加了65248。 然后将十进制转换为十六进制并放在“ \ u”后面,并用逗号覆盖,这样我就可以使用json_decode()。
$str = "Game some other text by ヴィックサ";
$str = preg_replace_callback(
"/[\x{0021}-\x{007e}]/u",
function($c) {
return json_decode('"'.('\\u'.dechex (ord($c[0])+65248)).'"');
}, $str);
我无法使用mb_convert_kana()。我不知道为什么,但是我认为这是因为我使用的是韩文字符串,而不是日语。
我的英语不好,但希望这个解释对您有所帮助。
答案 2 :(得分:0)
有一种更简单的方法:
$str = "Game";
// Becomes "Game"
$wideStr = mb_convert_kana($str, "R");