Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Browser detects ISO-8859-1 encoding on UTF-8 cakePHP app

On the server of my client, when I browse the application, the characters are wrong, because all of the Browsers (Firefox, Chrome, IE) decode the page as ISO-8859-1 instead of UTF-8. Local works great, and on my server works fine too.

I have an application developed with cakePHP 1.3.12:

  • The default encoding of all files is UTF-8 without BOM.
  • All pages has meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
  • In core.php

    Configure::write('App.encoding', 'UTF-8');
    
  • In database.php

    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'aaa',
        'password' => 'aaa',
        'database' => 'aaa',
        'prefix' => 'app_',
        'encoding' => 'utf8'
    );
    
  • The database, tables and fields collation is utf8_unicode_ci

I also put on the beginning of bootstrap.php:

echo mb_internal_encoding();

...and returns ISO-8859-1, so I put...

mb_internal_encoding('UTF-8');

...but nothing change.

The server that work bad has PHP 5.2.16. I think it's a module or option on the client server, because local and in my server works fine.

Any idea is appreciated.

like image 642
Matias Beckerle Avatar asked Jan 28 '26 05:01

Matias Beckerle


1 Answers

I solved the problem by putting in the first line of app/config/bootstrap.php file:

header('Content-Type: text/html; charset=utf-8');

Simple and it even seems obvious, but in this hosting, the cakePHP application did not work as expected. The response header always answer Content-Type ISO-8859-1. Now with this change, it answered UTF-8.

like image 200
Matias Beckerle Avatar answered Jan 30 '26 20:01

Matias Beckerle