作者liaosankai (低温烘焙)
看板PHP
标题Re: [请益] 请问全形小写如何转成全形大写
时间Mon Jun 24 14:36:31 2013
※ 引述《tas72732002 (葱头)》之铭言:
: 请问一下,
: 全形小写英文可以转成大写吗??
: 我使用strtoupper并不会帮我转成大写
: 不知道是否有其他的function可以用??
: 目前想到的方法是替换
: public function transChar($char){
: $find = array(
: "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");
: $relpace = array(
: "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");
: return str_replace($find,$relpace,$char);
: }
你的问题让我想到之前处理五十音平假名和片假名的转换,虽然那时候是用JS解决。
全形/半形转函式大概会像下面这样:
function shiftSpaceTable($char=null, $width='auto') {
//手刻对应表
$charTable = array(
//以"全形字元" => "半形字元"来建表
//由於会太长,所这边先略过,请自行手刻全部:)
"a" => "a",
"0" => "0",
);
//判断当前字元为半形或全形
$charWidth = array_key_exists($char,$charTable) ? 'full' : 'half';
//如果字元字形与指定字形一样,就直接回传
if($charWidth == $width) {
return $char;
}
//如果是要转半形,反转对应表
if($charWidth == 'half') {
$charTable = array_flip($charTable);
}
return $charTable[$char];
}
接着你就可以这样子解决了!
$halfstr = 'I am halfwidth words';
$fullstr = null;
for($i=0; $i<mb_strlen($halfstr,'UTF-8'); $i++) {
$char = mb_substr($halfstr,$i,1,'UTF-8');
//先转成半形
$lowerchar = shiftSpaceTable($char, 'half');
//转大写
$supperchar = strtoupper($lowerchar);
//再转全形
$fullstr .= shiftSpaceTable($supperchar, 'full');
}
echo $fullstr;//输出 I AM HALFWIDTH WORDS
另外一种方法是用程式来计算字码的差值,进行相对的转换。
如果有兴趣的话,可以参考
http://goo.gl/fY724
--
欢迎来我的网志看看
@
http://liaosankai.pixnet.net/blog
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 113.196.199.5
1F:推 s25g5d4:像这种阵列对应的方式 有个网站的简繁转换也是这样刻的 06/24 16:05
2F:→ s25g5d4:不过他是用 JS 去弄 不支援词汇对应 06/24 16:05