UTF-8的国际字体显示问题

时间:2009-05-15 10:46:08

标签: php unicode encoding utf-8 internationalization

我们开发了两种语言的PHP-MySQL应用程序 - 英语和古吉拉特语。古吉拉特语包含需要unicode UTF-8编码才能正确显示的符号。

应用程序在我的基于Windows的localhost和基于Linux的基于Linux的测试服务器上运行完美。

但是当我将应用程序转移到客户端的网络服务器(基于linux redhat)时,古吉拉特语字符显示不正确。

我检查了两个数据库(在我的网络服务器和客户端的网络服务器上)的原始数据 - 它完全相同。但是显示效果不同。在我的服务器上,字体显示得很完美,但是当我尝试访问客户端的应用程序副本时,Guajarati字体的显示都是错误的。

由于我是在同一台机器和同一台浏览器上测试这两个安装实例,因此问题不在于浏览器不兼容性或代码。我相信有一些服务器设置需要完成,我错过了。

你能帮忙吗。

由于

维纳亚克

更新

感谢。我们尝试过SO社区成员提供的apache和php设置建议。但问题仍然存在。

为了解决这个问题,我们研究了数据传递的不同阶段。

两个数据库(在客户端和最后)是完全相同的。它们没有区别。

此应用程序的下一步是运行查询,恢复数据,创建xml文件并保存。

然后使用PHP页面显示此XML文件。

我们发现问题在于正在创建的XML文件存在差异。用于创建XML文件的代码如下:

function fnCreateTestXML($testid)
{
    $objQuery = new clsQuery();
    $objTest = new clsTest();
    $setnames = $objQuery->fnSelectRecords("tbl_testsets", "setnumber", "");
    $queryresultstests = $objQuery->fnSelectRecords("tbl_tests", "", "");
    if($queryresultstests)
    {

        foreach($queryresultstests as $queryresulttest)
        {
            foreach($setnames as $setname)
            {
                //Creating Root node test and set its attribute 
                $doc = new DomDocument('1.0','utf-8');
                $root = $doc->createElement('test');
                $root = $doc->appendChild($root);
                //and so on

//Saving XML on the disk
                $xml_create = $doc->saveXML();
                $testname = "testsxml.xml";
                $xml_string = $doc->save($testname);

任何想法??

由于

维纳亚克

5 个答案:

答案 0 :(得分:2)

由于您已声明它在您的开发环境中而不是在您的客户端上工作,因此您可能需要检查客户端Apache的AddDefaultCharset并将其设置为UTF-8(如果尚未安装)。 (假设他们正在使用Apache。)

我倾向于确保检查以下步骤

  1. PHP标头以UTF-8
  2. 发送
  3. 元标记设置为UTF-8(内容类型)
  4. 存储设置为UTF-8
  5. 服务器输出设置为UTF-8
  6. 确保您的PHP代码文件采用带有BOM(字节顺序标记)的UTF8进行编码

答案 1 :(得分:2)

答案几乎肯定在于随网页发送的标题。为了诊断这样的问题,我发现安装firefox插件"Live HTTP Headers"很有用。

安装该插件,然后打开它并从客户端的网络服务器和您自己的网站重新加载页面。

您可能会看到,您的网络服务器提供的页面包含标题:

Content-Type: text/html; charset=UTF-8

然而,当客户端网络服务器提供服务时,它说:

Content-Type: text/html

我建议修复此问题的方法是确保您明确设置标题以在应用程序的每个页面中指定utf-8。然后,这会将您的应用程序与客户端的未来配置更改隔离开来。

为此,请致电

header('Content-type: text/html; charset=utf-8');
在发送任何数据之前,每页上都有

答案 2 :(得分:0)

确保响应标头正确 - 内容类型中应包含UTF-8。

答案 3 :(得分:0)

检查客户端计算机上数据库实例的字符集设置:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

在执行任何文本提取查询之前,请尝试执行:

SET NAMES utf8
SET CHARACTER SET utf8

如果可行,您可能需要将以下内容添加到客户端计算机上的my.cnf中:

[mysqld]
collation_server=utf8_unicode_ci
character_set_server=utf8
default-character-set=utf8
default-collation=utf8_general_ci
collation-server=utf8_general_ci

答案 4 :(得分:0)

请使用此元标记:meta http-equiv =“Content-Type”content =“text / html; charset = UTF-8”

确保在php中使用此代码:mysql_query(“set character_set_results ='utf8'”);