Помогите с расширенным ASCII/ кодированием в PHP!
Добрый вечер, ребята.
Это мой код:
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
заранее спасибо
2 ответа
Может ли быть так, что если у вас есть многобайтовые символы, и вы перебираете каждый символ, используя strlen()
проверить, не перебрал ли ты? strlen()
предполагает 1 байт == 1 символ.
Я бы посмотрел существующие библиотеки транслитерации для PHP.
Может быть, эта функция поможет вам в сочетании с mb_strlen:
РЕДАКТИРОВАТЬ: Например, вы могли бы пойти так:
$string = 'cioèòà';
for ($i=0;$i<mb_strlen($string);$i++) {
echo mb_substr($string, $i, 1);
}
Это перекликает вас всех отдельных персонажей.