Laravel 5 charset在视图上无法正常工作。但是当我从控制器

时间:2015-05-22 14:20:11

标签: php laravel utf-8 character-encoding laravel-5

我在这里遇到了一个字符集问题。我正在开发一个使用sql server数据库的应用程序。数据库不是为这个应用程序创建的,它存在于它之前并且运行良好。我无法更改数据库上的任何内容,因为它太大而且被许多其他应用程序使用 我已经完成了我的laravel 5应用程序的auth,所以我将创建一个视图并在此视图中显示已登录用户的名称。名称是:ADMINISTRADORDAACENTUAÇÃO。它使用一些特殊字符 在我看来:

{!!Auth::user()->name!!} 

它显示:

  

ADMINISTRADORDAACENTUA O

但是在我的控制器中,在我返回视图之前,我做了:

die(\Auth::user()->name);

它告诉我:

  

ADMINISTRADORDAACENTUAÇÃO

我现在尝试在我的视图文件中执行此操作:

    {!!Auth::user()->name!!}
<?php die();

这很好用。它告诉我:

  

ADMINISTRADORDAACENTUAÇÃO

这让我相信在解析视图之后laravel会发生错误。

我不知道为什么当我在控制器上死了用户名时效果很好,但是当我在视图上回显它的名字时它不起作用。

愿任何人帮助我吗?

PS:

  • 我的视图文件使用utf8 charset
  • 我尝试使用和不使用html标签和charset meta进行回显。两种情况都会出现问题
  • 我尝试删除我的视图文件并使用utf8字符集创建一个新文件。它不起作用。
  • 我尝试使用<?php echo Auth::user()->name; ?>代替刀片代码。它不起作用。

4 个答案:

答案 0 :(得分:4)

我使用this aswer解决了这个问题。我刚进入我的AppServiceProvider并进入启动方法:

Blade::setEchoFormat('e(utf8_encode(%s))');

我不知道这是否是正确的方法,但它对我有用。

答案 1 :(得分:2)

一般坚持使用UTF-8可以简化生活。

要非常小心地从其他地方复制和粘贴到您的代码中 - 在复制并粘贴到您的代码之前,基本上总是通过Notepad ++并使用其转换为UTF-8(无BOM)。

第一个问题 - 数据如何进入您的数据库?

Mega Top Tip 如果您正在使用表单,请确保在表单元素上设置了接受的charset属性:

<form accept-charset="UTF-8"

然后确保所有观看(包括错误页面)

<meta charset="UTF-8">

如果您正在进行HTML4,请执行以下操作

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

答案 2 :(得分:0)

由于成功和错误响应的行为不一致,因此差异可能在HTTP标头中。如果是这种情况,会发生什么情况是Sqlserver和您的浏览器使用相同的编码,可能是某些Windows默认编码,如cp1252,而Laravel配置为使用与数据库中使用的字符集不同的字符集进行响应。

在调用视图和死亡时检查HTTP标头内容类型() - 如果这是您的问题,请配置Laravel发送一些与您的模板和数据库编码一致的标头(或者当然!转码明确表示)需要时)

答案 3 :(得分:0)

我不小心在不同的文本编辑器中打开了我的UTF-8编码文件并保存了。但是,它会自动将UTF-8文件保存为ANSII。所以我必须再次打开文件并将文件保存为UTF-8编码。