strtoupper() с акцентами


функция strtoupper() PHP, это не превращая акцентированные буквы в верхнем регистре, пример:

echo strtoupper("virá"); // retorna VIRá

Есть ли функция, родной, который решает эту проблему?

Author: stderr, 2015-09-03

4 answers

Необходимо использовать его аналог, mb_strtoupper(), который будет обрабатывать unicode:

$encoding = mb_internal_encoding(); // ou UTF-8, ISO-8859-1...
echo mb_strtoupper("virá", $encoding); // retorna VIRÁ

И

$encoding = 'UTF-8'; // ou ISO-8859-1...
mb_convert_case('virá', MB_CASE_UPPER, $encoding);

Это потому, что функции mb_* работают в строки на основе их свойств Unicode. Символы с диакритическими знаками не являются "образований" обычных, и да многобайтовые. Поэтому, если вы используете strlen("придет"), результат будет 5 знаков, а не 4 (как вы ожидали).

О encoding выбранного

Условии, что мы не можем угадать, в которых зашифрование что сохраняет файлы, и в какой encoding использует в наружу, не может здесь сообщить правильный. Вы должны понять это. Лучший совет в том, что если сохранить файлы шрифтов в кодировке UTF-8 (все редакторе есть такая возможность) и в (output force вывод в UTF-8, используя тег <meta charset="SEU-ENCODING">

 36
Author: felipsmartins, 2015-09-03 12:40:01

MB_STRTOUPPER

mb_strtoupper('virá', 'UTF-8');

mb_internal_encoding('UTF-8');
mb_strtoupper('virá');
 11
Author: Diego Souza, 2015-09-03 12:30:10

, Кроме того, чтобы справиться с подчеркивание роли strtoupper мне также, что делать cast с данными, которые приходили в банк, код выглядел так.

mb_strtoupper(utf8_encode($variavel_do_banco['nome_coluna_banco']));
 1
Author: WMomesso, 2016-08-27 13:14:26

, Если использовать ISO-8859-1

header ('Content-type: text/html; charset=ISO-8859-1');

echo mb_strtoupper("maçãs são boas", 'ISO-8859-1');
 0
Author: Luy, 2018-05-14 13:17:48