Heim  >  Artikel  >  Backend-Entwicklung  >  关于php.ini开启zlib压缩输出导致乱码的有关问题

关于php.ini开启zlib压缩输出导致乱码的有关问题

WBOY
WBOYOriginal
2016-06-13 12:11:071189Durchsuche

关于php.ini开启zlib压缩输出导致乱码的问题

假如现在有一个下面这样的PHP脚本:

<?phpob_clean ();echo "hello world";


正常来说,运行这个脚本是没问题的,在Google Chrome浏览器中的显示结果:



但是如果你修改一下php.ini配置文件,把zlib压缩输出开启:



把上面红色框处的配置选项修改为On,然后保存重启apache,接着再运行刚才那个脚本,就会出现乱码的情况:



为什么会这样呢?我们试一下修改一下PHP脚本,把echo的语句注释掉:

<?phpob_clean ();//echo "hello world";


然后再运行脚本,这时候就可以看到为什么会乱码了,因为在php.ini配置文件开启zlib压缩输出的前提下,直接使用ob_clean()会导致程序向浏览器多输出一个奇怪的字符:



换IE试一下,结果还是一样,只是特殊字符的样式变了:



同样的问题在linux上也存在,证明不是windows的问题,那么怎么去掉这个特殊字符呢?很简单,只要在使用ob_clean()之前我们先使用ob_start()就可以了:

<?phpob_start ();ob_clean();echo "hello world";
加上ob_start()后,后面的hello world可以正常显示,不会乱码了。


所以现在我们可以得出一个结论:如果在PHP脚本中直接调用ob_clean(),同时服务器的php.ini开启了zlib压缩输出,就会导致后面输出的内容全部乱码,这时候,要不你就把zlib压缩输出关了,要不就在ob_clean()之前加上ob_start(),不然没法解决这个问题。不过考虑到程序猿通常没有修改服务器配置的权限,所以在coding的时候,记得使用ob_clean()之前一定要先调用ob_start()。


最后,至于为什么开启zlib压缩输出后,直接调用ob_clean()会导致程序会多输出一个特殊字符导致乱码,而关闭后调用就会没事,这个问题还要研究一下,或者有哪位PHP大神可以告诉 一下原因?




Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn