Php UTF-8可以在主机A上工作,但不能在主机B上工作,这是什么原因造成的?

Php UTF-8可以在主机A上工作,但不能在主机B上工作,这是什么原因造成的?,php,utf-8,Php,Utf 8,我与两个不同的提供商有托管计划,在提供商A上,我的网站没有任何问题,但在提供商B上,无论我做什么,UTF-8都不起作用 这两个主机的网站在各个方面都完全相同,所以我们这里唯一的区别就是服务器 如果我简单地在记事本上创建一个包含以下内容的文件,保存为UTF-8 enc: <?php header('content-type: text/html; charset: utf-8'); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

我与两个不同的提供商有托管计划,在提供商A上,我的网站没有任何问题,但在提供商B上,无论我做什么,UTF-8都不起作用

这两个主机的网站在各个方面都完全相同,所以我们这里唯一的区别就是服务器

如果我简单地在记事本上创建一个包含以下内容的文件,保存为UTF-8 enc:

<?php
header('content-type: text/html; charset: utf-8'); 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?
    $var = "áéíóí";
    echo $var;
?>
<body>
<html> 
迄今为止:

  • 将操作系统的区域设置更改为en_US.UTF8
  • 更改了apache上的默认字符集
  • 在php.ini上将charest设置为utf-8
  • 文件保存在UTF8上
  • 同一个文件在两个托管计划上都进行了测试,并且仅在托管A时有效
  • 在代码的第一行
    mb_内部编码(“UTF-8”)
  • 在代码的第一行
    setlocale(LC_CTYPE,'C')
  • 以上两种方法结合在一起
  • header('content-type:text/html;charset:utf-8')
    标题('content-type:text/html;charset=utf-8')
应该是:

header('content-type: text/html; charset=utf-8');
另外,对于您的情况,只有两件事是相关的——内容类型头(如果缺少相应的元标记)和实体中使用的实际编码。忘掉其他一切。

应该是:

header('content-type: text/html; charset=utf-8');

另外,对于您的情况,只有两件事是相关的——内容类型头(如果缺少相应的元标记)和实体中使用的实际编码。忘了其他一切。

将以下行添加到
php.ini
文件并重新启动httpd服务就成功了:

mbstring.internal_encoding=utf-8

将以下行添加到
php.ini
文件并重新启动httpd服务就达到了目的:

mbstring.internal_encoding=utf-8

@Prix那么,在这种情况下,您可以先转储两个响应中发送的头,然后比较它们。如果它们与内容类型相似,请移动以查看实体中是否存在任何差异。抱歉,是否在客户端转储标题?你能在这里给我指点方向吗?我已经用服务器上curl的回复更新了我的问题,我将从firebug那里了解如何做。我想确保我的浏览得到相同的回复或差异。@Prix一切看起来都很好。。。假设您的终端设置为UTF-8。是的,我正在尝试从firebug中找到如何执行此操作。firebug已启用控制台,但无法显示任何内容。@Prix好的,在这种情况下,您可以先转储两个响应中发送的标题,然后比较它们。如果它们与内容类型相似,请移动以查看实体中是否存在任何差异。抱歉,是否在客户端转储标题?你能在这里给我指点方向吗?我已经用服务器上curl的回复更新了我的问题,我将从firebug那里了解如何做。我想确保我的浏览得到相同的回复或差异。@Prix一切看起来都很好。。。假设您的终端设置为UTF-8。是的,我正在尝试从firebug中找到如何执行此操作。firebug已启用控制台,但无法显示任何内容。这意味着服务器已启用Zend multibyte,这有点奇怪,因为它带来了一个重大的性能损失,几乎没有什么好处。@事实上,我刚刚验证了它,它被启用了<代码>--启用zend multibyte
,很高兴知道这是原因。我将审查我们的php需要,以可能重新编译它。谢谢你的评论。这意味着服务器启用了Zend multibyte,这有点奇怪,因为它带来了一个显著的性能损失,而没有什么好处。@事实上,我刚刚验证了它,它被启用了<代码>--启用zend multibyte
,很高兴知道这是原因。我将审查我们的php需要,以可能重新编译它。谢谢你的评论。