utf-8 Carbon格式的错误字符

时间:2018-05-14 18:38:00

标签: php laravel laravel-5 php-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');

我的html

中有utf-8标签
<meta charset="utf-8">

但我仍然得错了字符。

  “sábado” - “miércoles”

1 个答案:

答案 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()函数。我建议第一个选择。希望这有助于:)