2010-09-16 2 views
0
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){ 

    switch ($in) { 
    case 'Á': 
      return 'A'; 
    case 'á': 
      return 'a'; 
    default: 
     return $in;  
    } 
} 

Это код. Не работает. Есть предположения? О да. Он всегда входит в выход dafault для любого входа. возможно, это связано с тем, как php обрабатывает строки символов X? Я не знаю.Невозможно получить методы в классе для работы

+0

Пожалуйста, опишите окружающий контекст. –

+0

Что именно не работает? – halfdan

+0

Что происходит не так? – vfn

ответ

1

Вместо переключения символа переключите код символа. Опасно встраивать символы расширенного ASCII непосредственно в строку, raw. Иногда даже редактор, который вы используете для написания кода, может неправильно сохранять символы, если указана неправильная кодировка.

+0

Хм ... Да, возможно, но он должен работать так, как есть, не так ли? –

+0

Всегда опасно вставлять ASCII расширенные символы, сырые в коде. –

1

Вы должны использовать вместо str_replace:

$input = str_replace(array('Á', 'á'), array('A', 'a'), $input); 

Это делает ту же самую работу, что и коммутатор заявления.

+2

Не совсем - вы имели в виду: '$ input = str_replace (array ('Á', 'A'), array ('á', 'a'), $ input);' - и видеть опасности вложения ASCII –

+0

I ' Попробуем это. Спасибо –

+0

Я согласен с Питером; На самом деле не имеет значения, как вы выполняете фактическую замену. До тех пор, пока вы вставляете расширенные символы ASCII, существует вероятность отказа кода. –

0

Да. Я немного изменил код

 switch ($in) { 
     case 'B': 
      return 'A'; 
     case 'b': 
      return 'a'; 
     default: 
      return $in;  
    } 

для тестирования, и это сработало. Спасибо всем.

Смежные вопросы