Помогите с расширенным ASCII / кодированием в PHP!
-
03-10-2019 - |
Вопрос
Добрый вечер люди.
Это мой код:
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:
Редактировать: Например, вы можете пойти так:
$string = 'cioèòà';
for ($i=0;$i<mb_strlen($string);$i++) {
echo mb_substr($string, $i, 1);
}
Это будет повторять вам все одно единственное число.