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

utf8 编码 PHP 文件 直接记事本修改 有可能会出现一些问题,为什么

  •  
  •   ouou8 · 2019-04-27 17:11:28 +08:00 · 8442 次点击
    这是一个创建于 2036 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有些时候,因为一些代码只需要简单修改几个字母,就懒得打开 sublime 或其他工具来修改了,就直接用记事本打开 utf8 编码的 php 文件 修改一下,然后保存的时候没有选择记事本另存为使用 utf8,而是直接 ctrl+s 直接保存一下,一些情况下是没有问题的,但是有时候却有问题,比如说会导致你程序的后台登陆验证码 无法显示,或者就算验证码能够显示,不过不管你怎么输入,这个验证码都是不正确的。 若去掉验证码,即是登录后台的时候,直接账号密码登录,屏蔽验证码这项,登录成功,其他功能也不受影响。

    为什么 代码正确的情况下,原是 utf8 编码的文件直接用记事本(记事本保存后可能变成 gbk ?或者带 bom 了?) 修改之后会或多或少影响一些东西呢?为什么会出现这种影响?

    代码正确,为什么编码却能影响,比如验证码挂掉。

    7 条回复    2019-04-28 08:58:24 +08:00
    micookie
        1
    micookie  
       2019-04-27 17:21:23 +08:00   ❤️ 2
    BOM 头,在编辑器中是不可见,但是他的的确确是存在的。

    在返回 php 验证码的时候,原本输出的只是图片的二进制流

    但是因为 BOM 头的存在,会造成图片的二进制流前边存在 BOM 头

    浏览器无法识别 response,是一个正确的图片格式。
    ouou8
        2
    ouou8  
    OP
       2019-04-27 17:30:30 +08:00
    @micookie 但若 php 文件原本就是 gbk 编码的,用记事本编辑却没事,这时直接编辑 不会带 bom 吗?
    shiny
        3
    shiny  
       2019-04-27 17:32:33 +08:00   ❤️ 1
    @ouou8 BOM 头用来标记 UTF-8/UTF-16/UTF-32 的,GBK 没有这玩意儿。https://zh.wikipedia.org/wiki/%E4%BD%8D%E5%85%83%E7%B5%84%E9%A0%86%E5%BA%8F%E8%A8%98%E8%99%9F
    crab
        4
    crab  
       2019-04-27 17:36:12 +08:00
    @ouou8 gbk 没 BOM 头啊
    codehz
        5
    codehz  
       2019-04-27 17:39:09 +08:00
    用 win10,可以选择无 bom
    heybuddy
        6
    heybuddy  
       2019-04-27 23:00:04 +08:00 via Android
    以前调腾讯的一个 sdk,里面的一个文件就有 BOM 头,害我调了半天
    zyy314680012
        7
    zyy314680012  
       2019-04-28 08:58:24 +08:00 via Android
    notepad++好像可以
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   935 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:22 · PVG 06:22 · LAX 14:22 · JFK 17:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.