Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 由于wamp上的编码/解码可能不正确,因此未相应显示特殊字符_Php_Mysql_Apache_Utf 8 - Fatal编程技术网

Php 由于wamp上的编码/解码可能不正确,因此未相应显示特殊字符

Php 由于wamp上的编码/解码可能不正确,因此未相应显示特殊字符,php,mysql,apache,utf-8,Php,Mysql,Apache,Utf 8,我有一个网站正在建设中,在那里显示用户帖子。在使用PHP 5.2.5和Apache 2.2.6的开发服务器(在Windows XP上)中,这是正常的,也就是说,通过在html页面的页眉部分添加charset meta标记,可以按原样显示特殊字符: <meta charset="utf-8"> 然后,例如,结果如下所示: ███─█─────█─███─███─███ █───█─────█─█───█────█ ███─█──█──█─██──██───█ ──█─█─█─█─█─

我有一个网站正在建设中,在那里显示用户帖子。在使用PHP 5.2.5和Apache 2.2.6的开发服务器(在Windows XP上)中,这是正常的,也就是说,通过在html页面的页眉部分添加charset meta标记,可以按原样显示特殊字符:

<meta charset="utf-8">
然后,例如,结果如下所示:

███─█─────█─███─███─███ █───█─────█─█───█────█ ███─█──█──█─██──██───█ ──█─█─█─█─█─█───█────█ ███─██───██─███─███──█

███─███──███─███─██───█─███─ █───█─█───█──█───█─█──█─█──█ ███─██────█──██──█──█─█─█──█ █───█─█───█──█───█───██─█──█ █───█──█─███─███─█────█─███─

目前,我已使用PHP 5.6.29和Apache 2.4.23将我的项目上载到一个新的开发服务器(在Windows7上),其中显示的页面如下:

(一)(一)(一)(二)(一))(二)(二))(三 █───█─────█─█───█────█ ███─█──█──█─██──██───█ ──█─█─█─█─█─█───█────█ 一、二、二、三、四、四、四、四、四、四、四、四、四、四、四、四、四

一、一、二、三、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四 █───█─█───█──█───█─█──█─█──█ ███─██────█──██──█──█─█─█──█ █───█─█───█──█───█───██─█──█ 一、二、二、三、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四

在新环境中,我还尝试了:

echo utf8_encode($postBody);
但这是徒劳的。我还在httpd.conf中添加了:

AddDefaultCharset utf-8

PHP中的默认\u字符集已经过检查,也发现是utf-8

但这一切都是血脉相连的

我还检查了MySQL中的字符集数据库,它位于两台服务器(以前的和新的)中,发现是latin1


尽管我自己也做了一些尝试,但为什么相同的页面在两个版本中显示的不同,我对此毫无意义。有什么可能导致我出现这样的问题,我将如何解决?提前谢谢

PHP的默认字符集在PHP5.6中更改为UTF-8。请参阅此链接:

这意味着自PHP5.6以来,对于需要字符集作为参数的函数,默认字符集是UTF-8。PHP还发送一个值为UTF-8的内容类型头

这可能就是为什么在切换到PHP5.6之后,代码不会显示相同的输出

如果试图显示的数据是从MySQL数据库中获取的,那么应该将MySQL表和数据库的字符集更改为UTF-8。之后,尝试将数据重新输入数据库,以便使用UTF-8字符编码进行存储


另请参见:

在PHP5.6中,PHP的默认字符集更改为UTF-8。请参阅此链接:

这意味着自PHP5.6以来,对于需要字符集作为参数的函数,默认字符集是UTF-8。PHP还发送一个值为UTF-8的内容类型头

这可能就是为什么在切换到PHP5.6之后,代码不会显示相同的输出

如果试图显示的数据是从MySQL数据库中获取的,那么应该将MySQL表和数据库的字符集更改为UTF-8。之后,尝试将数据重新输入数据库,以便使用UTF-8字符编码进行存储


另请参见:

在“谢谢”中查找“Mojibake”的可能副本中查找“Mojibake”的可能副本,我尚未尝试您的答案。但目前,我在页面中设置了charset,而不是content-type标题。他们不是为我做了同样的事情吗?内容类型头是一个http头,web服务器发送到浏览器。Php>=5.6自动发送此标头。内容类型http头和字符集meta标记都做相同的事情,因此您不需要将meta-charset标记添加到页面谢谢,我还没有尝试使用您的答案。但目前,我在页面中设置了charset,而不是content-type标题。他们不是为我做了同样的事情吗?内容类型标题
echo utf8_encode($postBody);