您的位置:首页 > 编程语言 > PHP开发

php中使用GD处理图片时,php文件为UTF-8编码时不能正常运行的问题

2013-05-03 09:35 836 查看
本来写了个给上传的图片添加文字水印的php方法,但是那时的php文件使用的ANSI编码

现在的项目使用的是UTF8的编码 于是就不能运行了

然后百度是个又烂又瘫。。。还是用google 问题出现在我是将以前的ANSI编码的php文件使用window自带的notepad转换成UTF-8的编码 而微软脑残自己会在前面加BOM标记

http://stackoverflow.com/questions/3170000/php-image-jpeg-dont-work-if-file-is-utf-8-works-if-its-ansi

然后php会把那个BOM标记作为字节一起输出 就会出问题了

Are you possibly saving the files as UTF8 BOM? That would likely screw up image output, since the BOM character is always output first. Try saving it as UTF8 No-BOM, that should be identical to ANSI files.
Notepad++ lets you convert/encode files to "utf8 without BOM"

Basically, there can't be any characters before your <?php tag. If you save as UTF8 with BOM, the BOM goes before
the <?php tag. Also watch out for MIME-type problems if you're serving an image file with a .php extension. I'd suggest adding a header() to send the image/jpeg MIME type

BOM标记:

UTF-8文件的Unicode签名BOM(Byte Order Mark)

BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记,在UTF-16里本来是FF FE,变成UTF-8就成了EF BB BF。这个标记是可选的,因为UTF8字节没有顺序,所以它可以被用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当作正常字符处理。

微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记。

部分摘自:http://blog.csdn.net/thimin/article/details/1724393

同时Java也不支持UTF-8中的BOM标记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐