strtoupper() с акцентами
функция strtoupper()
PHP, это не превращая акцентированные буквы в верхнем регистре, пример:
echo strtoupper("virá"); // retorna VIRá
Есть ли функция, родной, который решает эту проблему?
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">
MB_STRTOUPPER
mb_strtoupper('virá', 'UTF-8');
mb_internal_encoding('UTF-8');
mb_strtoupper('virá');
, Кроме того, чтобы справиться с подчеркивание роли strtoupper
мне также, что делать cast с данными, которые приходили в банк, код выглядел так.
mb_strtoupper(utf8_encode($variavel_do_banco['nome_coluna_banco']));
, Если использовать ISO-8859-1
header ('Content-type: text/html; charset=ISO-8859-1');
echo mb_strtoupper("maçãs são boas", 'ISO-8859-1');