浏览器在UTF-8 cakePHP应用程序上检测ISO-8859-1编码


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

在我的客户端服务器上,当我浏览应用程序时,字符是错误的,因为所有浏览器(Firefox, Chrome, IE)都将页面解码为ISO-8859-1而不是UTF-8。本地工作得很好,在我的服务器上也工作得很好。

我用cakePHP 1.3.12开发了一个应用程序:

  • 所有文件默认编码为UTF-8,不含BOM编码。
  • 所有页面都有meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
  • In 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。我认为这是客户端服务器上的模块或选项,因为本地和我的服务器工作得很好。

我解决了这个问题,在app/config/bootstrap.php文件的第一行:

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

很简单,甚至看起来很明显,但是在这个主机中,cakePHP应用程序并没有像预期的那样工作。响应头总是回答内容类型ISO-8859-1。现在有了这个改变,它回答了UTF-8。

您可以尝试检查服务器上的。htaccess文件是否添加了如下内容:

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

Mime类型可能不同,语法也会有一些变化,但看起来会很相似。

这将用。htaccess

中的全局字符集覆盖文件字符集。

数据库排序规则可能与information_schemamysql用户的排序规则不同(使用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>";