我有一个正在建设的网站,其中显示了用户帖子。在使用PHP 5.2.5和Apache 2.2.6的开发服务器(在Windows XP上)它很好,即通过将charset元标记添加到html页面的标题部分来显示特殊字符:
<meta charset="utf-8">
并像这样回应:
echo html_entity_decode($postBody, ENT_QUOTES, 'UTF-8');
然后,例如,结果如下:
███─█───────────────────────────────────────────███ █─█──█──█─██──██───█ ──█─█─█─█─█─█───────████─██──────────,,,,,,,,,,, ███─███──███─███─██───────────────────────────────────────────────────────────────────────────── █──█─█──█ ███─██─────────────────────────────────────────────── █─█──█ █───█──█─███─███─█────█─███─
目前,我已将我的项目上传到一个新的开发服务器(在Windows7上),其中包含PHP 5.6.29和Apache 2.4.23,其中相同的页面显示如下:
A-A-A-A”€A-A”€A”€A”€A”€A”€A-A”€A-A-A-A”€A-A-A-A “€A-A-A- A-A”€一个”€一个”€A-A”€一个”€一个”€一个”€一个”€A-A”€A-A”€一个”€一个”€A-A”€â “€一个”€一个”€A- A-A-A-A”€A-A”€一个”€A-A”€一个”€A-A”€A-A-A”€一个”€A-A-A”€一个”€一个”€A- 一个”€一个”€A-A”€A-A”€A-A”€A-A”€A-A”€A-A”€一个”€一个”€A-A”€一个”€一个”€一个”€A- A-A-A-A”€A-A-A”€一个”€一个”€A-A-A”€A-A-A-A”€A-A-A-A”€一个”€ A-
A-A-A-A”€A-A-A-A”€A”€A-A-A-A”€A-A-A-A”€A-A-A”€â “€一个”€A-A”€A-A-A-A”€ A-A”€一个”€一个”€A-A”€A-A”€一个”€一个”€A-A”€一个”€A-A”€一个”€一个”€A-A” €A-A”€一个”€A-A”€A-A”€一个”€A- A-A-A-A”€A-A-A”€一个”€一个”€一个”€A-A”€一个”€A-A-A”€一个”€A-A”€一个” €A-A”€A-A”€A-A”€一个”€A- A-A”€一个”€一个”€A-A”€A-A”€一个”€一个”€A-A”€一个”€A-A”€一个”€一个”€A-A” €一个”€一个”€A-A-A”€A-A”€一个”€A- A-A”€一个”€一个”€A-A”€一个”€A-A”€A-A-A-A”€A-A-A-A”€A-A”€一个”€一个”€A”€A-A”€A-A-A-A”€
在新环境中,我也尝试过:
echo utf8_encode($postBody);
但它没有结果。我还在httpd.conf中添加了:
AddDefaultCharset utf-8
已检查PHP中的 default_charset ,并且还发现它是utf-8。
但这一切都在静脉中。
我还检查了MySQL中的 character_set_database 两个服务器(上一个和新的),发现 latin1 。
我没有意义,为什么同样的页面在两个版本中显示不同,尽管尝试了这一点。有什么可能导致我遇到这样的问题,我将如何通过解决方案摆脱它?提前谢谢!
答案 0 :(得分:0)
PHP的默认字符集在Php 5.6中更改为UTF-8。请看这个链接:PHP 5.6 default_charset change may break HTML output。
这意味着需要charset作为参数的函数的默认字符集默认为UTF-8,因为PHP 5.6。 PHP还会发送一个值为UTF-8的内容类型标头。
这可能是您切换到PHP 5.6后代码不显示相同输出的原因
如果您正在尝试显示的数据是从MySQL数据库中提取的,那么您应该将MySQL表和数据库的字符集更改为UTF-8。之后尝试将数据重新输入到数据库,以便使用UTF-8字符编码进行存储。
另请参阅:Php Ini Directives