V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
pine
V2EX  ›  PHP

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

  •  
  •   pine · Mar 10, 2017 · 5077 views
    This topic created in 3340 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
        1
    ningcool  
       Mar 10, 2017
    apache 中的配置文件里
    pine
        2
    pine  
    OP
       Mar 10, 2017
    @ningcool 我用 charset 河 utf 用关键词搜索过了,并没有,而且.html 文件不受影响,只有.php 文件受影响。
    lslqtz
        3
    lslqtz  
       Mar 10, 2017
    default_charset = "utf-8",改成 gbk
    建议改用 ini_set
    zhaoto
        4
    zhaoto  
       Mar 10, 2017 via iPhone
    应该要把目录下*.php 文件格式全部转换 UTF-8 。
    zhaoto
        5
    zhaoto  
       Mar 10, 2017 via iPhone
    光指定 charset=UTF-8 没有用,一定要转换文件格式的。
    pine
        6
    pine  
    OP
       Mar 11, 2017
    @lslqtz 我说了,改成 gbk 当然正常,但是 utf8 文件又出错了
    @zhaoto 可能是我描述的混乱,没让你明白我的意思,这个网站是用 gbk 做的,而且没有任何问题,但是 wamp 却把当作 utf8 了,不是我的文档出错了,是环境出错了,明白了吧,我想知道是环境哪里出错了。
    pine
        7
    pine  
    OP
       Mar 12, 2017
    @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
        8
    lslqtz  
       Mar 12, 2017
    @pine 那你先批量把文件转成 utf8 再把这些统一设置不就好了。。
    pine
        9
    pine  
    OP
       Mar 12, 2017
    文件又没错,为什么要改?发给你个 doc 文件,结果关联成 pdf 了,你就要转成 pdf 再看?
    pine
        10
    pine  
    OP
       Mar 12, 2017
    我已经解释的很清楚了,能不能关闭问题?
    log4geek
        11
    log4geek  
       Mar 18, 2017
    其实,无时无刻都使用 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
        12
    pine  
    OP
       Mar 18, 2017
    @log4geek 看你中毒不浅。。。
    log4geek
        13
    log4geek  
       Mar 19, 2017
    @pine 都是踩坑踩出来的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2376 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 01:45 · PVG 09:45 · LAX 18:45 · JFK 21:45
    ♥ Do have faith in what you're doing.