Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel 5 charset not working correctly on the views. But it working well when I dump it from controller

I'm facing a charset problem here. I'm developing an app that uses a sql server database. The database was not created for this app, it exists before it and works very well. I can't change anything on the database because its too large and its used by many other apps.
I've been finished the auth of my laravel 5 app, so I'll create a view and show in this view the name of logged user. The name is: ADMINISTRADOR DA ACENTUAÇÃO. It use some special characters.
In my views:

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

it shows:

ADMINISTRADOR DA ACENTUA��O

But in my controller, before I return the view, I did:

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

and it shows me:

ADMINISTRADOR DA ACENTUAÇÃO

I try now do it in my view file:

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

And this works fine. It shows me:

ADMINISTRADOR DA ACENTUAÇÃO

It makes me believe the error occours for something laravel does after the views are parsed.

I don't know why it works well when I die the user name on the controller, but not works when I echo its name on the view.

May anyone help me plz?

PS:

  • My view file is using utf8 charset
  • I tried to echo with and without html tags and charset meta. The problem occours on both cases
  • I tried to delete my view file and create a new one with utf8 charset. It doesn't work.
  • I tried to use <?php echo Auth::user()->name; ?> instead blade tags. It doesn't work.
like image 562
Anderson Silva Avatar asked May 22 '15 14:05

Anderson Silva


2 Answers

I solved this issue using this aswer. I've just went in my AppServiceProvider and put into boot method:

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

I don't know if this is the correct way to do it, but it works for me.

like image 110
Anderson Silva Avatar answered Oct 18 '22 01:10

Anderson Silva


Generally sticking to UTF-8 keeps life simple.

Be super careful copying and pasting from anywhere else into your code - basically always go through Notepad++ and use its convert to UTF-8 (without BOM) before copying and pasting into your code.

First question - how is the data getting into your database?

Mega Top Tip If you're using a form, make sure you've set the accepted charset attribute on the form element:

<form accept-charset="UTF-8"

Then make sure all your views (including error pages), have

<meta charset="UTF-8">

Or the following if you're doing HTML4

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
like image 27
Dave Amphlett Avatar answered Oct 17 '22 23:10

Dave Amphlett