Laravel 5 字符集无法在视图上正常工作。但是当我从控制器中转储它时它运行良好
Laravel 5 charset not working correctly on the views. But it working well when I dump it from controller
我遇到了字符集问题。我正在开发一个使用 sql 服务器数据库的应用程序。数据库不是为此应用程序创建的,它存在于它之前并且运行良好。我无法更改数据库中的任何内容,因为它太大并且被许多其他应用程序使用。
我已经完成了我的 laravel 5 应用程序的授权,因此我将创建一个视图并在该视图中显示已登录用户的名称。名称是:ADMINISTRADOR DA ACENTUAÇãO。它使用了一些特殊字符。
在我看来:
{!!Auth::user()->name!!}
它显示:
ADMINISTRADOR DA ACENTUA��O
但是在我的控制器中,在 return 视图之前,我做了:
die(\Auth::user()->name);
它告诉我:
ADMINISTRADOR DA ACENTUAÇÃO
我现在尝试在我的视图文件中执行此操作:
{!!Auth::user()->name!!}
<?php die();
这很好用。它告诉我:
ADMINISTRADOR DA ACENTUAÇÃO
这让我相信错误发生在 laravel 解析视图后。
我不知道为什么当我在控制器上删除用户名时效果很好,但当我在视图上回显它的名字时却不起作用。
有人能帮我吗?
PS:
- 我的视图文件使用的是 utf8 字符集
- 我尝试在有和没有 html 标签和字符集元的情况下回显。两种情况都会出现问题
- 我试图删除我的视图文件并使用 utf8 字符集创建一个新文件。没用。
- 我尝试使用
<?php echo Auth::user()->name; ?>
而不是 blade 标签。没用。
由于成功和错误响应的行为不一致,差异可能在于 HTTP headers。如果是这种情况,发生的情况是 Sqlserver 和您的浏览器使用相同的编码,可能是一些 Windows 默认值,例如 cp1252,而 Laravel 配置为使用与数据库。
在调用视图和死时检查 HTTP header content-type - 如果这是你的问题,请配置 Laravel 发送一些 header与您的模板和数据库编码一致(或者当然!在需要时明确转码)
通常坚持使用 UTF-8 可以让生活变得简单。
从其他任何地方复制粘贴到您的代码中时要格外小心 - 基本上总是先通过 Notepad++ 并使用其转换为 UTF-8(无 BOM),然后再复制并粘贴到您的代码中。
第一个问题 - 数据如何进入您的数据库?
超级顶级提示
如果您使用的是表单,请确保您已在表单元素上设置了接受的字符集属性:
<form accept-charset="UTF-8"
然后确保您的所有视图(包括错误页面)
<meta charset="UTF-8">
或者如果您正在执行以下操作 HTML4
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
我使用 解决了这个问题。我刚刚进入我的 AppServiceProvider 并进入引导方法:
Blade::setEchoFormat('e(utf8_encode(%s))');
我不知道这是否是正确的方法,但它对我有用。
我不小心在不同的文本编辑器中打开了我的 UTF-8
编码文件并保存了。但是,它自动将我的 UTF-8
文件保存为 ANSII
。所以我必须再次打开文件并将文件保存为 UTF-8
编码。
我遇到了字符集问题。我正在开发一个使用 sql 服务器数据库的应用程序。数据库不是为此应用程序创建的,它存在于它之前并且运行良好。我无法更改数据库中的任何内容,因为它太大并且被许多其他应用程序使用。
我已经完成了我的 laravel 5 应用程序的授权,因此我将创建一个视图并在该视图中显示已登录用户的名称。名称是:ADMINISTRADOR DA ACENTUAÇãO。它使用了一些特殊字符。
在我看来:
{!!Auth::user()->name!!}
它显示:
ADMINISTRADOR DA ACENTUA��O
但是在我的控制器中,在 return 视图之前,我做了:
die(\Auth::user()->name);
它告诉我:
ADMINISTRADOR DA ACENTUAÇÃO
我现在尝试在我的视图文件中执行此操作:
{!!Auth::user()->name!!}
<?php die();
这很好用。它告诉我:
ADMINISTRADOR DA ACENTUAÇÃO
这让我相信错误发生在 laravel 解析视图后。
我不知道为什么当我在控制器上删除用户名时效果很好,但当我在视图上回显它的名字时却不起作用。
有人能帮我吗?
PS:
- 我的视图文件使用的是 utf8 字符集
- 我尝试在有和没有 html 标签和字符集元的情况下回显。两种情况都会出现问题
- 我试图删除我的视图文件并使用 utf8 字符集创建一个新文件。没用。
- 我尝试使用
<?php echo Auth::user()->name; ?>
而不是 blade 标签。没用。
由于成功和错误响应的行为不一致,差异可能在于 HTTP headers。如果是这种情况,发生的情况是 Sqlserver 和您的浏览器使用相同的编码,可能是一些 Windows 默认值,例如 cp1252,而 Laravel 配置为使用与数据库。
在调用视图和死时检查 HTTP header content-type - 如果这是你的问题,请配置 Laravel 发送一些 header与您的模板和数据库编码一致(或者当然!在需要时明确转码)
通常坚持使用 UTF-8 可以让生活变得简单。
从其他任何地方复制粘贴到您的代码中时要格外小心 - 基本上总是先通过 Notepad++ 并使用其转换为 UTF-8(无 BOM),然后再复制并粘贴到您的代码中。
第一个问题 - 数据如何进入您的数据库?
超级顶级提示 如果您使用的是表单,请确保您已在表单元素上设置了接受的字符集属性:
<form accept-charset="UTF-8"
然后确保您的所有视图(包括错误页面)
<meta charset="UTF-8">
或者如果您正在执行以下操作 HTML4
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
我使用
Blade::setEchoFormat('e(utf8_encode(%s))');
我不知道这是否是正确的方法,但它对我有用。
我不小心在不同的文本编辑器中打开了我的 UTF-8
编码文件并保存了。但是,它自动将我的 UTF-8
文件保存为 ANSII
。所以我必须再次打开文件并将文件保存为 UTF-8
编码。