Плохие символы в формате UTF-8 Carbon

Я знаю, что об этом много, но это не работает, у меня установлен язык.

locale -a | grep es
 es_ES
 es_ES.ISO8859-1
 es_ES.ISO8859-15
 es_ES.UTF-8

Я установил UTF-8

\Carbon\Carbon::setUtf8(true);
setlocale(LC_ALL, 'es_ES.UTF-8');
$game_date = $date->formatLocalized('%A %d %B %Y %H %M %p');

У меня есть тег utf-8 в моем html

<meta charset = "utf-8">

но я все еще получаю неправильные символы.

"sábado" - "miércoles"

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 564
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня была такая же проблема при попытке использовать локаль sk_SK.UTF-8. Что помогло мне решить проблему, так это удаление части кода \Carbon\Carbon::setUtf8(true);.

Но почему это так работает? Во-первых, документация Carbon относительно функции setUtf8 говорит следующее:

Some languages require utf8 encoding to be printed (locale packages that does not ends with .UTF8 mainly). In this case you can use the static method Carbon::setUtf8() to encode the result of the formatLocalized() call to the utf8 charset.

После изучения исходного кода для Carbon функция formatLocalized() вызывает функцию utf8_encode() из библиотеки PHP, если мы ранее установили для переменной utf8 значение true с уже упомянутым Carbon::setUtf8(true). Источник углерода на GitHub

return static::$utf8 ? utf8_encode($formatted) : $formatted;

Поскольку ваш языковой стандарт уже настроен для использования стандарта UTF-8, дальнейшая кодировка php приводит к искажению форматированной строки.

Я подумал, что если вы хотите использовать Carbon для форматирования строк в utf8, вы должны сначала избавиться от кодировки UTF-8 при установке языкового стандарта с помощью setLocale(). Однако я бы просто удалил функцию Carbon и использовал правильный языковой стандарт.

TL; DR

Используйте правильный языковой стандарт с кодировкой UTF-8, например. es_ES.UTF-8 или используйте попробуйте использовать локаль без кодировки UTF-8 и положитесь на функции \Carbon\Carbon::setUtf8(true); и utf8_encode(). Предлагаю первый вариант. Надеюсь, это помогло :)

Я искал этот ответ. Вся информация, которую я нашел, была связана с базой данных, но я не использовал ее и знал, что это связано с библиотекой. СПАСИБО ВАМ БОЛЬШОЕ.

Jose Adrian 04.02.2020 01:21

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