我知道这有很多,但它不起作用,我安装了语言。
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');
我的html
中有utf-8标签<meta charset="utf-8">
但我仍然得错了字符。
“sábado” - “miércoles”
答案 0 :(得分:4)
尝试使用sk_SK.UTF-8
语言环境时遇到了同样的问题。帮助我解决问题的方法是删除代码的\Carbon\Carbon::setUtf8(true);
部分。
但为什么它会像这样工作?首先,关于setUtf8函数的Carbon文档说明了这一点:
某些语言需要打印utf8编码(主要是以.UTF8结尾的语言环境包)。在这种情况下,您可以使用静态方法Carbon :: setUtf8()将formatLocalized()调用的结果编码为utf8字符集。
在检查Carbon的源代码时,formatLocalized()
函数从PHP库中调用utf8_encode()
函数,如果我们之前使用已经提到的Carbon::setUtf8(true)
将变量utf8设置为true。
Carbon source on GitHub
return static::$utf8 ? utf8_encode($formatted) : $formatted;
因为你的语言环境已经配置为使用UTF-8标准,所以进一步的php编码会混淆格式化的字符串。
我认为如果您想使用Carbon将字符串格式化为utf8,则在使用setLocale()
设置语言环境时必须首先删除UTF-8编码。但是,我会坚持删除Carbon功能并使用正确的语言环境。
TL; DR
使用UTF-8编码的正确语言环境,例如es_ES.UTF-8
或尝试使用不带UTF-8编码的语言环境,并依赖\Carbon\Carbon::setUtf8(true);
和utf8_encode()
函数。我建议第一个选择。希望这有助于:)