作者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
推 s25g5d4:像這種陣列對應的方式 有個網站的簡繁轉換也是這樣刻的 06/24 16:05
→ s25g5d4:不過他是用 JS 去弄 不支援詞彙對應 06/24 16:05