V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pine
V2EX  ›  PHP

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

  •  
  •   pine · 2017-03-10 18:04:37 +08:00 · 4690 次点击
    这是一个创建于 2814 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天整理以前写的代码,不少是 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 解释文件编码?而不加干涉呢?

    第 1 条附言  ·  2017-03-11 09:13:55 +08:00
    标题有点不恰当,解决的办法有很多种,但是这个问题是出在环境身上,所以只考虑环境的问题。
    第 2 条附言  ·  2017-03-11 09:54:23 +08:00
    问题已解决,是我对 php 里这个参数配置理解有误引起的,如果由 html 代码中 charset 去解析文档编码, php 不去干涉,php 网站写的是 default_charset='';这样便不会再出现 header 中(实际上还是出现了,不知道是 php 还是 apache ,相当于检测到了文档的真实编码),如果注释了代码则和 default_charset='utf-8'是同样的效果,而我以为 default_charset 是编码不明的情况下才会启用的,而实际上,不论你是 utf8 还是 gbk 对作者和编辑器是能检测到的,对 php 而言总是不明的,所以 default_charset 总是启用的,即这里写的什么就按什么显示,从某种意义上来说类似与 BOM 。
    第 3 条附言  ·  2017-03-12 18:12:30 +08:00
    (实际上还是出现了,不知道是 php 还是 apache ,相当于检测到了文档的真实编码)上面这段文字应该去掉,后来在测试,已经真的没有了。
    13 条回复    2017-03-19 09:17:12 +08:00
    ningcool
        1
    ningcool  
       2017-03-10 19:21:33 +08:00
    apache 中的配置文件里
    pine
        2
    pine  
    OP
       2017-03-10 19:53:40 +08:00
    @ningcool 我用 charset 河 utf 用关键词搜索过了,并没有,而且.html 文件不受影响,只有.php 文件受影响。
    lslqtz
        3
    lslqtz  
       2017-03-10 19:55:32 +08:00
    default_charset = "utf-8",改成 gbk
    建议改用 ini_set
    zhaoto
        4
    zhaoto  
       2017-03-10 19:56:46 +08:00 via iPhone
    应该要把目录下*.php 文件格式全部转换 UTF-8 。
    zhaoto
        5
    zhaoto  
       2017-03-10 20:02:05 +08:00 via iPhone
    光指定 charset=UTF-8 没有用,一定要转换文件格式的。
    pine
        6
    pine  
    OP
       2017-03-11 09:06:08 +08:00
    @lslqtz 我说了,改成 gbk 当然正常,但是 utf8 文件又出错了
    @zhaoto 可能是我描述的混乱,没让你明白我的意思,这个网站是用 gbk 做的,而且没有任何问题,但是 wamp 却把当作 utf8 了,不是我的文档出错了,是环境出错了,明白了吧,我想知道是环境哪里出错了。
    pine
        7
    pine  
    OP
       2017-03-12 08:31:24 +08:00
    @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  
       2017-03-12 12:13:32 +08:00
    @pine 那你先批量把文件转成 utf8 再把这些统一设置不就好了。。
    pine
        9
    pine  
    OP
       2017-03-12 18:16:15 +08:00
    文件又没错,为什么要改?发给你个 doc 文件,结果关联成 pdf 了,你就要转成 pdf 再看?
    pine
        10
    pine  
    OP
       2017-03-12 18:18:46 +08:00
    我已经解释的很清楚了,能不能关闭问题?
    log4geek
        11
    log4geek  
       2017-03-18 12:55:36 +08:00
    其实,无时无刻都使用 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
       2017-03-18 20:49:01 +08:00
    @log4geek 看你中毒不浅。。。
    log4geek
        13
    log4geek  
       2017-03-19 09:17:12 +08:00
    @pine 都是踩坑踩出来的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2771 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 94ms · UTC 13:50 · PVG 21:50 · LAX 05:50 · JFK 08:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.