我正在尝试将标准ASCII字母转换为全角日语等效字母。例如:
Game
变得Game
搜索了一个答案,我发现这个问题有一个很好的答案,我在下面引用了:
$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 语句中的 (-) 符号更改为 (+),但没有取得多大成功。
使用 PHP 的 mb_convert_kana
函数这很简单。请参阅 http://php.net/manual/en/function.mb-convert-kana.php。您至少希望R
模式将"han-kaku"字母转换为"zen-kaku"。
有一种更简单的方法可以做到这一点:
$str = "Game";
// Becomes "Game"
$wideStr = mb_convert_kana($str, "R");
"/[''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()。我不知道为什么,但我认为这是因为我使用韩国弦乐,而不是日语弦乐。
我不擅长英语,但我希望这个解释对你有所帮助。