在我的客户端服务器上,当我浏览应用程序时,字符是错误的,因为所有浏览器(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_schema
中mysql
用户的排序规则不同(使用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>";