Плохие символы в формате UTF-8 Carbon - PullRequest
0 голосов
/ 14 мая 2018

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

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">

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

"сабадо" - "мироколес"

1 Ответ

0 голосов
/ 02 июня 2018

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

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

Для некоторых языков требуется печать кодировки utf8 (языковые пакеты, в основном, не заканчивающиеся на .UTF8). В этом случае вы можете использовать статический метод Carbon :: setUtf8 () для кодирования результата вызова formatLocalized () в кодировке utf8.

После изучения исходного кода для 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(). Я предлагаю первый вариант. Надеюсь, это помогло:)

...