And*_*ipe 1 php laravel php-carbon laravel-5
我知道有很多关于此的内容,但是它不起作用,我已经安装了该语言。
locale -a | grep es
es_ES
es_ES.ISO8859-1
es_ES.ISO8859-15
es_ES.UTF-8
Run Code Online (Sandbox Code Playgroud)
我已经设置为utf-8
\Carbon\Carbon::setUtf8(true);
setlocale(LC_ALL, 'es_ES.UTF-8');
$game_date = $date->formatLocalized('%A %d %B %Y %H %M %p');
Run Code Online (Sandbox Code Playgroud)
我的html中有utf-8标签
<meta charset="utf-8">
Run Code Online (Sandbox Code Playgroud)
但是我仍然得到错误的字符。
“sábado”-“miércoles”
尝试使用sk_SK.UTF-8语言环境时,我遇到了同样的问题。帮助我解决问题的是删除了\Carbon\Carbon::setUtf8(true);部分代码。
但是为什么它如此工作?首先,关于setUtf8函数的Carbon文档说:
某些语言要求打印utf8编码(主要不是以.UTF8结尾的语言环境软件包)。在这种情况下,可以使用静态方法Carbon :: setUtf8()来编码对utf8字符集的formatLocalized()调用的结果。
在检查Carbon的源代码后,如果我们已经使用前面提到的将utf8变量设置为true,则该函数从PHP库formatLocalized()调用utf8_encode()函数Carbon::setUtf8(true)。
GitHub上的碳源
return static::$utf8 ? utf8_encode($formatted) : $formatted;
Run Code Online (Sandbox Code Playgroud)
因为您的语言环境已经配置为使用UTF-8标准,所以进一步的php编码会使格式化的字符串混乱。
我认为,如果您想使用Carbon来将字符串格式设置为utf8,则在使用设置语言环境时必须首先摆脱UTF-8编码setLocale()。但是,我只是坚持删除Carbon函数并使用正确的语言环境。
TL; DR
例如es_ES.UTF-8,使用带有UTF-8编码的正确语言环境,或尝试使用不带UTF-8编码的语言环境并依赖\Carbon\Carbon::setUtf8(true);和utf8_encode()功能。我建议第一种选择。希望这有帮助:)