I had the same problem when trying to use the sk_SK.UTF-8
locale. What helped me to solve the problem was to remove the \Carbon\Carbon::setUtf8(true);
portion of the code.
But why does it work like this? Firstly the Carbon documentation regarding the setUtf8 function says this:
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.
Upon examining the source code for Carbon the formatLocalized()
function calls utf8_encode()
function from the PHP library if we previously set the variable utf8 to true with the already mentioned Carbon::setUtf8(true)
.
Carbon source on GitHub
return static::$utf8 ? utf8_encode($formatted) : $formatted;
Because your locale is already configured to use the UTF-8 standard the further php encoding messes the formatted string up.
I figured that if you want to use Carbon to format your strings to utf8 you must first get rid of the UTF-8 encoding when setting your locale with setLocale()
. However, I would just stick to removing the Carbon function and using the proper locale.
TL;DR
Use correct locale with UTF-8 encoding e.g. es_ES.UTF-8
or use try to use locale without the UTF-8 encoding and rely on \Carbon\Carbon::setUtf8(true);
and utf8_encode()
function. I suggest the first option. Hope this helped :)