***解決PHP輸出多余的空格或換行


用CI框架寫APP后台接口的時候,返回的JSON前面有多余的2哥換行,首先排查的是BOM,結果問題依舊

再就是排查<?php ?> 標簽外沒有多余的回車、換行,結果發現確實有多余的換行,去掉之后,問題消失。

總結:建議去掉PHP結束標簽,這樣會避免很多莫名其妙的問題

 

 

寫代碼的童鞋應該知道,經常會在前端看到頁面不能置頂,即使加了再多的樣式,都不行,那就可以考慮一下是否為下面幾種情況了:

1、確認代碼沒有 echo 或者 exit 空格、換行;

2、確保 php 文件里 <?php ?> 標簽外沒有多余的回車、換行;

3、以上兩點都排查之后,如果你的代碼文件為 UTF8 編碼文件,那可以考慮可能是由於 BOM 文件頭造成的,可以使用任何一款非微軟制作的文本編輯器(如Notepad++、ultraedit等)打開文件,另存為無BOM的文件,如果文件太多,可以將以下代碼保存並放到根目錄下執行一次即可!

<?php
//remove the utf-8 boms
if (isset($_GET['dir'])){
	//config the basedir
	$basedir=$_GET['dir'];
}else{
	$basedir = '.';
}

$auto = 1;
checkdir($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")." <br>";
				}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=red>BOM found, automatically removed.</font>");
		} else {
			return ("<font color=red>BOM found.</font>");
		}
	}
	else return ("BOM Not Found.");
}

function rewrite ($filename, $data) {
	$filenum = fopen($filename, "w");
	flock($filenum, LOCK_EX);
	fwrite($filenum, $data);
	fclose($filenum);
}
?>


php bom去除工具,php批量去除bom的代碼

php批量去除文件bom代碼的功能,支持文件夾批量去除。具體php文件代碼如下:

01 <?php
02 header('content-Type: text/html; charset=utf-8');
03 $auto=1;/*設置為1標示檢測BOM並去除,設置為0標示只進行BOM檢測,不去除*/
04 $basedir='.';
05 $loop=true;//www.phpernote.com
06 echo '當前查找的目錄為:'.$basedir.'當前的設置是:';
07 echo '(1)',$loop?'檢查當前目錄以及當前目錄的子目錄':'只針對當前目錄進行檢測';
08 echo '(2)',$auto?'檢測文件BOM同時去除檢測到BOM文件的BOM<br />':'只檢測文件BOM不執行去除BOM操作<br />';
09  
10 checkdir($basedir,$loop);
11 function checkdir($basedir='',$loop=true){
12     $basedir=empty($basedir)?'.':$basedir;
13     if($dh=opendir($basedir)){
14         while (($file=readdir($dh))!==false){
15             if($file!='.'&&$file!='..'){
16                 if(!is_dir($basedir.'/'.$file)){
17                     echo '文件: '.$basedir.'/'.$file .checkBOM($basedir.'/'.$file).' <br>';
18                 }else{
19                     if(!$loopcontinue;
20                     $dirname=$basedir.'/'.$file;
21                     checkdir($dirname);
22                 }
23             }
24         }
25         closedir($dh);
26     }
27 }
28 function checkBOM($filename){
29     global $auto;
30     $contents=file_get_contents($filename);
31     $charset[1]=substr($contents,0,1);
32     $charset[2]=substr($contents,1,1);
33     $charset[3]=substr($contents,2,1);
34     if(ord($charset[1])==239&&ord($charset[2])==187&&ord($charset[3])==191){
35         if($auto==1){
36             $rest=substr($contents,3);
37             rewrite($filename,$rest);
38             return (' <font color=red>找到BOM並已自動去除</font>');
39         }else{
40             return (' <font color=red>找到BOM</font>');
41         }
42     }else{
43         return (' 沒有找到BOM');
44     }
45 }
46 function rewrite($filename,$data){
47     $filenum=fopen($filename,'w');
48     flock($filenum,LOCK_EX);
49     fwrite($filenum,$data);
50     fclose($filenum);
51 }

將以上代碼保存為后綴為php的文件放到需要去除bom的文件目錄里面,然后運行該php文件,將會對該目錄以及該目錄所有的子目錄下的文件進行bom檢查並去除bom,運行結果頁面如下:

php bom去除工具,php批量去除bom的代碼






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM