什么是Bom头 怎样去除PHP文件的Bom头

什么是Bom头 怎样去除PHP文件的Bom头,第1张

方法一:用Ultraedit或Editplus打开PHP文件,另存为无Bom的utf-8文件方法二:用Dreamweaver去除Bom头

菜单–修改–页面属性 或者ctrl+j打开页面属性窗口,点选“标题/编码”去掉“包括Unicode签名Bom”前的勾

有Bom的文件太多?这样太麻烦?当然有更好的方法!方法三:用php文件批量去除bom头 将以下这段代码保存为php文件,上传到服务器,用浏览器访问它!<?phpif (isset($_GET['dir'])){ //设置文件目录

$basedir=$_GET['dir']}else{$basedir = '.'}$auto = 1checkdir($basedir)

function checkdir($basedir){

if ($dh = opendir($basedir)) {

while (($file = readdir($dh)) !== false) {

if ($file != '.' &&$file != '..'){

if (!is_dir($basedir./.$file)) {

echo filename: $basedir/$file .checkBOM($basedir/$file). }else{$dirname = $basedir./.$file

checkdir($dirname)}}}closedir($dh)}}function checkBOM ($filename) {

global $auto

$contents = file_get_contents($filename)

$charset[1] = substr($contents, 0, 1)

$charset[2] = substr($contents, 1, 1)

$charset[3] = substr($contents, 2, 1)

if (ord($charset[1]) == 239 &&ord($charset[2]) == 187 &&ord($charset[3]) == 191) {

if ($auto == 1) {

$rest = substr($contents, 3)

rewrite ($filename, $rest)

return (<font color=redBOM found, automatically removed.</font)} else {return (<font color=redBOM found.</font)}}else return (BOM Not Found.)}function rewrite ($filename, $data) {

$filenum = fopen($filename, w)

flock($filenum, LOCK_EX)

fclose($filenum)}?还用记事本保存?那你真是智商捉急了!

去掉bom头的办法,简单的是下面两种:

1、editplus去BOM头的方法

编辑器调整为UTF8编码格式后,保存的文件前面会多出一串隐藏的字符(也即是BOM),用于编辑器识别这个文件是否是以UTF8编码。

运行Editplus,点击工具,选择首选项,选中文件,UTF-8标识选择 总是删除签名,

然后对PHP文件编辑和保存后的PHP文件就是不带BOM的了。

2、ultraedit去除bom头办法

打开文件后,另存为选项的编码格式里选择(utf-8 无bom头),确定就ok了

PHP 下载文件时自动添加bom头,首先需要大家弄清楚,什么是bom头?在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了。 不仅限于 记事本保存的文件,只要在文件的开口包含了EF BB BF 几个不可见的字符(十六进制应该是是xEFxBBxBF,用二进制编辑文件可见)。这像是一个约定俗成的东西,当系统看到这玩意的时候,就会觉得你这个文件是UTF-8编码的。 如果你的接口是UTF-8的,你需要强制下载一个文件,比如csv.excel在默认情况(中文背景)下,认为csv是GB编码的,所以如果米有bom头,那你给用户呈现的文件,可能就是乱码了。 怎么加bom头呢? 在输出文件之前加上bom头就可以了: 代码如下: // 文件名 $filename = " .csv" header('Expires: ' . gmdate('D, d M Y H:i:s', $_SERVER['REQUEST_TIME'] + 10) . ' GMT') header('Cache-Control: max-age=10') //header('Content-Type: application/vnd.ms-excelcharset=utf-8') header('Content-Type: text/csvcharset=utf-8') header("Content-Disposition: attachmentfilename={$filename}") // 如果结果中有提示信息,则把第一行输出改为提示信息文字 $out = "xEFxBBxBF"// 加上bom头,系统自动默认为UTF-8编码 if (!empty($extra['notice'])) { $out .= "{$extra['notice']}rn" } // 输出 foreach ($table as $row) { $out .= implode(",", $row) . "rn" } /* if (mb_detect_encoding()($out) == 'UTF-8') { $out = iconv("UTF-8//IGNORE", "GBK", $out) } */ echo $out以下内容给大家介绍解释BOM头和去掉方法 去掉bom头的办法,简单的是下面两种: 1、editplus去BOM头的方法 编辑器调整为UTF8编码格式后,保存的文件前面会多出一串隐藏的字符(也即是BOM),用于编辑器识别这个文件是否是以UTF8编码。 运行Editplus,点击工具,选择首选项,选中文件,UTF-8标识选择 总是删除签名,然后对PHP文件编辑和保存后的PHP文件就是不带BOM的了。 2、ultraedit去除bom头办法 打开文件后,另存为选项的编码格式里选择(utf-8 无bom头),确定就ok了 怎么样,去掉bom头很简单吧 再来一段议论utf8的BOM信息的 BOM是指php文件本身的存储方式为带BOM的UTF-8,普通页面的中文乱码方式一般不是由这个原因导致的。 header("Content-type: text/htmlcharset=utf-8") 这句话控制html输出页面的编码方式,BOM只有在WINDOWS下采用“记事本”存储为UTF-8时才会有,这个可以用WINHEX把开始的2个字节删掉。 在dreamweaver里面编码设置里面可以设置是否带BOM,一般只要php输出的不是图片(GDI Stream),BOM都不会导致问题。 GDI Stream如果开头有了额外的 字符就会显示为 红叉。 以上内容给大家介绍了PHP 下载文件时自动添加bom头及解释BOM头和去掉方法,希望大家喜欢。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12103971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存