Вопрос

Добрый вечер люди.

Это мой код:

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;
    }
}

Ok. Это то, что не работает

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

И это то, что делает:

case 98: //b
return 'a';

Это только для целей тестирования.

Может кто-нибудь сказать мне, что происходит? У меня был такой же ошибка, но теперь я не использую какой-либо расширенный ASCII в самом коде, который был причиной ошибки раньше.

Я думаю, что это должно иметь что делать с кодировкой характера, но я не уверен. Кстати, я кодирую в затмении и, по его словам, кодирование персонажа, которую я использую, является CP1252.

О, и да, код должен устранить любые акцентированные буквы, такие как À À и заменить их основными вогалами, то есть á->

заранее спасибо

Это было полезно?

Решение

Может ли быть, если у вас есть несколько байтовых символов, и вы зацикливаете каждый символ, используя strlen() Чтобы проверить, не зацикливаются? strlen() предполагает 1 байт == 1 символ.

Я бы посмотрел Существующие библиотеки транслитерации для php.

Другие советы

Может быть, эта функция поможет вам в сочетании с MB_strlen:

MB_STRCUT.илиMB_SUBSTR.

Редактировать: Например, вы можете пойти так:

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

Это будет повторять вам все одно единственное число.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top