2010-09-16 28 views
1

晚上好。使用PHP進行擴展ASCII /編碼的幫助!

這是我的代碼:

static private function removeAccentedLetters($input){ 
    for ($i = 0; $i < strlen($input); $i++) { 
     $input[$i]=self::simplify($input[$i]); 
    } 
    return $input; 
} 
static private function simplify($in){ 
    $ord=ord($in); 
    switch ($ord) { 
     case 193: //Á... 
     return 'A'; 
     case 98: //b 
     return 'a'; 
     default: 
     return $in; 
    } 
} 

確定。這是行不通

case 193: //Á... 
    return 'A'; 

位而這是做位:

case 98: //b 
return 'a'; 

這些只是用於測試目的。

誰能告訴我發生了什麼事?我之前有類似的錯誤,但現在我沒有在代碼本身中使用任何擴展的ASCII,這是之前的錯誤原因。

我在想它必須與字符編碼有關,但我不確定。順便說一句,我在Eclipse中進行編碼,據我所知,我使用的字符編碼是Cp1252。

哦,是的,代碼應該消除任何重音符號,如甲A,並與他們的基本vogals,即A-拆換>一

在此先感謝

回答

2

難道說如果您有多字節字符,並且您正在使用strlen()檢查每個字符是否循環檢查是否已經循環? strlen()假設1字節== 1字符。

我想看看PHP的existing transliteration libraries

+0

這很有道理。是否有另外一種方法可以通過一條不會被這個愚弄的字符串循環? – 2010-09-16 07:05:13

+0

@Felipe看看'mb_strlen()'。不過,我仍然認爲你應該看看現有的解決方案。如果你真的熱衷於推出自己的產品,請檢查一個已知的工作人員並對其進行分析。玩的開心! – alex 2010-09-16 07:09:09

+0

* @ Alex:*您的搜索鏈接Google不起作用。應該是:http://www.google.com/search?q=php+transliteration – MikeSchinkel 2010-10-12 03:35:02

1

也許這個功能可以幫助您結合mb_strlen:

mb_strcutmb_substr

編輯:例如,你可以是這樣的:

$string = 'cioèòà'; 
for ($i=0;$i<mb_strlen($string);$i++) { 
    echo mb_substr($string, $i, 1); 
} 

這將呼應你一切單個字符出來。