我在这里遇到了一个字符集问题。我正在开发一个使用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:
<?php echo Auth::user()->name; ?>
代替刀片代码。它不起作用。答案 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
编码。