Браузер обнаруживает кодировку ISO-8859-1 в приложении UTF-8 cakePHP - PullRequest
3 голосов
/ 07 октября 2011

На сервере моего клиента, когда я просматриваю приложение, символы неправильные, потому что все браузеры (Firefox, Chrome, IE) декодируют страницу как ISO-8859-1 вместо UTF-8.Локально работает отлично, и на моем сервере тоже отлично работает.

У меня есть приложение, разработанное с cakePHP 1.3.12:

  • Кодировка по умолчанию для всех файлов - UTF-8 без спецификации.
  • На всех страницах есть meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
  • В core.php

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

    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'aaa',
        'password' => 'aaa',
        'database' => 'aaa',
        'prefix' => 'app_',
        'encoding' => 'utf8'
    );
    
  • Сортировка базы данных, таблиц и полей: utf8_unicode_ci

Я также положил начало bootstrap.php:

echo mb_internal_encoding();

... и возвращает ISO-8859-1, поэтому я поставил ...

mb_internal_encoding('UTF-8');

... но ничего не изменилось.

Сервер, который работает плохо, имеет PHP 5.2.16,Я думаю, что это модуль или опция на клиентском сервере, потому что локальный и на моем сервере работает нормально.

Любая идея приветствуется.

Ответы [ 3 ]

6 голосов
/ 15 октября 2011

Я решил проблему, поместив в первую строку файл app / config / bootstrap.php:

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

Просто и даже кажется очевидным, но на этом хостинге приложение cakePHP не работает должным образом. Заголовок ответа всегда соответствует типу содержимого ISO-8859-1. Теперь с этим изменением он ответил UTF-8.

0 голосов
/ 05 декабря 2013

параметры сортировки базы данных могут отличаться от параметров для пользователя mysql в вашем information_schema (используйте phpmyadmin, чтобы проверить это).

Если у вас нет необходимых прав для изменения этих настроек, это может решить вашу проблему, если предположить, что заголовок вашей страницы charset имеет значение utf-8:

// Opens a connection to a MySQL server
$connection = mysql_connect ($server, $username, $password);
$charset = mysql_client_encoding($connection);
$flagChange = mysql_set_charset('utf8', $connection);
echo "The character set is: $charset</br>mysql_set_charset result:$flagChange</br>";
0 голосов
/ 07 октября 2011

Вы можете попробовать проверить, добавлено ли в файл .htaccess что-то вроде этого:

AddType 'text/html; charset=ISO-8859-1' html

Тип MIME может отличаться, и существуют некоторые вариации в синтаксисе, но он будет выглядеть аналогично.

Это перезапишет кодировку файлов с глобальной кодировкой, установленной в .htaccess

...