I'm working on a website for a client who's located in Brazil. A section of his website shows feedback/reviews from users.
Here is an example:
Correct Version:
"Três aprovados em menos de dois minutos!"
When I output to the user, this is whats showing:
Incorrect Version:
"Três aprovados em menos de dois minutos!"
I'm saving these reviews to a mySQL database (Hostgator) and I've set my database collation to "utf8_unicode_ci".
At the top of my HTML decument, I've declared this:
<!DOCTYPE html>
<html lang="pt-BR" class="fixed">
<head>
<title>@yield("title")</title>
<!-- Basic -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<!-- Rest of the page is here -->
</body>
</html>
I'm using Laravel 5 to grab my data from the DB and I display it like so:
{{ mb_convert_encoding($feedback->message, "UTF-8") }}
Funny thing is, if I use the code above on my localhost, the correct "review" is shown. But once I upload it to hostgator, the "review" is not shown correctly.
If I change it to "{{ mb_convert_encoding($feedback->message, "auto") }}", the correct "review" is shown on uploaded page but on my localhost, the wrong "review" is shown.
I've never ran into this issue before!
When I get phpinfo on the clients hostgator page, it shows that "default_charset" is set to "null"
Could that be the issue?
Thanks!
UPDATE
I've fixed the "default_charset" to "UTF-8" and I still have the same issue.
Here's the response header
Cache-Control:no-cache Connection:Keep-Alive Content-Type:text/html; charset=UTF-8 Date:Fri, 18 Sep 2015 19:36:29 GMT Keep-Alive:timeout=5, max=75 Server:Apache Set-Cookie:XSRF-TOKEN=[hidden]; expires=Fri, 18-Sep-2015 21:36:29 GMT; Max-Age=7200; path=/ Set-Cookie:laravel_session=[hidden]; expires=Fri, 18-Sep-2015 21:36:29 GMT; Max-Age=7200; path=/; httponly Transfer-Encoding:chunked
Heres my Database Configuration:
PDO::FETCH_CLASS, /* |-------------------------------------------------------------------------- | Default Database Connection Name |-------------------------------------------------------------------------- | | Here you may specify which of the database connections below you wish | to use as your default connection for all database work. Of course | you may use many connections at once using the Database library. | */ 'default' => env('DB_CONNECTION', 'mysql'), /* |-------------------------------------------------------------------------- | Database Connections |-------------------------------------------------------------------------- | | Here are each of the database connections setup for your application. | Of course, examples of configuring each database platform that is | supported by Laravel is shown below to make development simple. | | | All database work in Laravel is done through the PHP PDO facilities | so make sure you have the driver for your particular database of | choice installed on your machine before you begin development. | */ 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'database' => storage_path('database.sqlite'), 'prefix' => '', ], 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ], 'pgsql' => [ 'driver' => 'pgsql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', ], 'sqlsrv' => [ 'driver' => 'sqlsrv', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', ], ], /* |-------------------------------------------------------------------------- | Migration Repository Table |-------------------------------------------------------------------------- | | This table keeps track of all the migrations that have already run for | your application. Using this information, we can determine which of | the migrations on disk haven't actually been run in the database. | */ 'migrations' => 'migrations', /* |-------------------------------------------------------------------------- | Redis Databases |-------------------------------------------------------------------------- | | Redis is an open source, fast, and advanced key-value store that also | provides a richer set of commands than a typical key-value systems | such as APC or Memcached. Laravel makes it easy to dig right in. | */ 'redis' => [ 'cluster' => false, 'default' => [ 'host' => '127.0.0.1', 'port' => 6379, 'database' => 0, ], ], ];