pine
V2EX  ›  PHP

PHP 引起乱码,强制 UTF-8 如何解决?

  •  
  •   pine · Mar 10, 2017 · 5488 views
    This topic created in 3525 days ago, the information mentioned may be changed or developed.

    今天整理以前写的代码,不少是 gbk 写的,之前也没问题,但是现在出问题了,系统 windows10,wamp ,文件 gbk , meta 指定 gbk ,但还是按 utf8 去显示,其中如果为静态文件, html 或者 txt 都正常,但是 php 就出错,猜测是 apache 或者 php 的原因,但在 apache 中没找到相关代码,在 php.ini 中找到如下代码 default_charset = "utf-8",改成 gbk ,可以正常显示,注释这行代码,又变成 utf-8 ,也就是说,还有文件指定了 header 里的 Content-Type:text/html; charset=UTF-8 ,请问怎么正常显示?由 html 代码的 charest 解释文件编码?而不加干涉呢?

    Supplement 1  ·  Mar 11, 2017
    标题有点不恰当,解决的办法有很多种,但是这个问题是出在环境身上,所以只考虑环境的问题。
    Supplement 2  ·  Mar 11, 2017
    问题已解决,是我对 php 里这个参数配置理解有误引起的,如果由 html 代码中 charset 去解析文档编码, php 不去干涉,php 网站写的是 default_charset='';这样便不会再出现 header 中(实际上还是出现了,不知道是 php 还是 apache ,相当于检测到了文档的真实编码),如果注释了代码则和 default_charset='utf-8'是同样的效果,而我以为 default_charset 是编码不明的情况下才会启用的,而实际上,不论你是 utf8 还是 gbk 对作者和编辑器是能检测到的,对 php 而言总是不明的,所以 default_charset 总是启用的,即这里写的什么就按什么显示,从某种意义上来说类似与 BOM 。
    Supplement 3  ·  Mar 12, 2017
    (实际上还是出现了,不知道是 php 还是 apache ,相当于检测到了文档的真实编码)上面这段文字应该去掉,后来在测试,已经真的没有了。
    13 replies  •  2017-03-19 09:17:12 +08:00
    ningcool
    ningcool
    Mar 10, 2017
    1
    apache 中的配置文件里
    pine
    pine
    OP
    Mar 10, 2017
    2
    @ningcool 我用 charset 河 utf 用关键词搜索过了,并没有,而且.html 文件不受影响,只有.php 文件受影响。
    lslqtz
    lslqtz
    Mar 10, 2017
    3
    default_charset = "utf-8",改成 gbk
    建议改用 ini_set
    zhaoto
    zhaoto
    Mar 10, 2017 via iPhone
    4
    应该要把目录下*.php 文件格式全部转换 UTF-8 。
    zhaoto
    zhaoto
    Mar 10, 2017 via iPhone
    5
    光指定 charset=UTF-8 没有用,一定要转换文件格式的。
    pine
    pine
    OP
    Mar 11, 2017
    6
    @lslqtz 我说了,改成 gbk 当然正常,但是 utf8 文件又出错了
    @zhaoto 可能是我描述的混乱,没让你明白我的意思,这个网站是用 gbk 做的,而且没有任何问题,但是 wamp 却把当作 utf8 了,不是我的文档出错了,是环境出错了,明白了吧,我想知道是环境哪里出错了。
    pine
    pine
    OP
    Mar 12, 2017
    7
    @lslqtz 仔细看了下说明, default_charset = "",设为空值,即为禁止发送编码。
    =====================================================

    ; By default, PHP will output a character encoding using
    ; the Content-type: header. To disable sending of the charset, simply
    ; set it to be empty.
    ;
    ; PHP's built-in default is text/html
    ; http://php.net/default-mimetype
    ;default_mimetype = "text/html"

    ; PHP's default character set is set to UTF-8.
    ; http://php.net/default-charset
    default_charset = ""
    lslqtz
    lslqtz
    Mar 12, 2017
    8
    @pine 那你先批量把文件转成 utf8 再把这些统一设置不就好了。。
    pine
    pine
    OP
    Mar 12, 2017
    9
    文件又没错,为什么要改?发给你个 doc 文件,结果关联成 pdf 了,你就要转成 pdf 再看?
    pine
    pine
    OP
    Mar 12, 2017
    10
    我已经解释的很清楚了,能不能关闭问题?
    log4geek
    log4geek
    Mar 18, 2017
    11
    其实,无时无刻都使用 UTF8 ,是个好习惯。。
    PHP 入门学习之网站处处使用使用 UTF8 编码,传送门
    http://log4geek.cc/2017/03/php%e5%85%a5%e9%97%a8%e5%ad%a6%e4%b9%a0%e4%b9%8b%e5%a4%84%e5%a4%84%e4%bd%bf%e7%94%a8%e4%bd%bf%e7%94%a8utf8%e7%bc%96%e7%a0%81/
    pine
    pine
    OP
    Mar 18, 2017
    12
    @log4geek 看你中毒不浅。。。
    log4geek
    log4geek
    Mar 19, 2017
    13
    @pine 都是踩坑踩出来的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4940 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 06:43 · PVG 14:43 · LAX 22:43 · JFK 01:43
    ♥ Do have faith in what you're doing.