[請益] require_once自動引入換行問題

看板PHP作者時間13年前 (2012/04/14 21:27), 編輯推噓8(9156)
留言66則, 7人參與, 最新討論串1/1
小弟我遇到一個問題 index.php 的一開頭若有一個 <?php require_once('a.php'); ?> 的話 會自動引入一個換行,導致我排版錯誤。 大家可以直接拿下面的code去run看看 我的瀏覽器:google chrmoe, IE9, FireFox10.0.2(不會有這問題) ================================== EXAMPLE ================================== [index.php] <?php require_once('a.php'); ?> <html> <head> <title>abc</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div class="wrapper"> abcde<br /> </div> </body> </html> ================================== [style.css] body { text-align: center; margin: 0; padding: 0; background-color: #800080; } .wrapper { width: 1000px; margin: 0 auto; text-align: left; background-color: #C0C0C0; } ================================== [a.php] <?php define('AB', '1'); ?> ================================== 產出的原始碼 <html> <head> <title>abd</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div class="wrapper">abcde<br /> </div> </body> </html> ================================== 問題: 我需要用到 "a.php" 可是一開頭的 require_once 會引入一個非預期的「換行」 該如何把這個非預期的換行給挪掉呢? 或者我該換用甚麼其他語法嗎? 感激不盡 ! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.78.106

04/14 21:29, , 1F
a.php 的內容是?另外html前面的一行拿掉?
04/14 21:29, 1F

04/14 21:30, , 2F
看看a.php是不是有輸出..
04/14 21:30, 2F

04/14 21:31, , 3F
<html>前面那個空行應不致影響排版
04/14 21:31, 3F

04/14 21:33, , 4F
有時就怕很玄...所以才盡量能避免的就避掉 囧"
04/14 21:33, 4F

04/14 21:34, , 5F
BOM???
04/14 21:34, 5F

04/14 21:34, , 6F
a.php只有定義define(常數, ...)耶 ...
04/14 21:34, 6F

04/14 21:35, , 7F
你把檔案全部都設定成無bom模式看看。
04/14 21:35, 7F

04/14 21:36, , 8F
要怎麼設呢?會有甚麼影響?
04/14 21:36, 8F

04/14 21:37, , 9F
多書來的這一行位在<body>和<div id="wrapper">之間...
04/14 21:37, 9F

04/14 21:37, , 10F
sorry, 是class="wrapper" ... 筆誤
04/14 21:37, 10F

04/14 21:38, , 11F
<html>前的那一個空白行也有拿掉了
04/14 21:38, 11F

04/14 21:38, , 12F
我做的實驗是,拿掉和留著require_once,會多一行
04/14 21:38, 12F

04/14 21:43, , 13F
所以不管有沒有都會多一行嗎?
04/14 21:43, 13F

04/14 21:45, , 14F
沒有require_once,就不會多一行
04/14 21:45, 14F

04/14 21:46, , 15F
貼出你的 a.php 裡面的內容看看吧
04/14 21:46, 15F

04/14 21:46, , 16F
有require_once的話,就會多一行在<body>和wrapper之間
04/14 21:46, 16F

04/14 21:47, , 17F
a.php裡面都是定義常數的語法。例:define('AB','1');
04/14 21:47, 17F
※ 編輯: ontario 來自: 118.168.78.106 (04/14 21:57)

04/14 21:54, , 18F
能把網頁貼上來看看嗎?其實在中間出現有點神奇@@"
04/14 21:54, 18F

04/14 21:54, , 19F
多一行是指最後產出的HTML原始檔多一個<br>還是多一個"\n"?
04/14 21:54, 19F

04/14 21:57, , 20F
我有設定不同顏色,可以拿上面完整的code試試看
04/14 21:57, 20F

04/14 21:58, , 21F
如果真的找不到,就HTML換成echo "<body><div class=..";
04/14 21:58, 21F

04/14 22:02, , 22F
我是用chrome的「檢查元素」發現的...不清楚是<br>還是\n
04/14 22:02, 22F

04/14 22:03, , 23F
我看好像是 \n.... br就會是br ... QQ
04/14 22:03, 23F

04/14 22:04, , 24F
測試確認了,是\n,那是因為你 abc 跟 div 不同行
04/14 22:04, 24F

04/14 22:04, , 25F
解答就是誤會一場XD
04/14 22:04, 25F

04/14 22:04, , 26F
我試過了正常耶,你可否把產出的的HTML原始碼貼出來
04/14 22:04, 26F

04/14 22:05, , 27F
突然看到原PO你寫會導致排版錯誤 ... 如果會錯應該不會是\n
04/14 22:05, 27F

04/14 22:05, , 28F
才對啊... @@
04/14 22:05, 28F

04/14 22:07, , 29F
樓上說的對,是誤會一場的可能很大
04/14 22:07, 29F

04/14 22:07, , 30F
abc 跟 div 不同行,我這邊測試沒影響耶 ...
04/14 22:07, 30F
※ 編輯: ontario 來自: 118.168.78.106 (04/14 22:11)

04/14 22:09, , 31F
那就照 dio 說的,把你看到的原始碼貼出來,順便拍你出現的
04/14 22:09, 31F

04/14 22:09, , 32F
畫面看看@@.. 因為怕真的是誤會
04/14 22:09, 32F

04/14 22:13, , 33F
你的意思是不同瀏覽器結果也會不同?那就跟Server端沒什麼關
04/14 22:13, 33F

04/14 22:13, , 34F
產出原始碼重編在上面了。
04/14 22:13, 34F

04/14 22:14, , 35F
係了,你要不先加<!DOCTYPE html PUBLIC..... 這個在第一行
04/14 22:14, 35F

04/14 22:18, , 36F
你把你的產出原始碼放到Server端,用不同瀏覽器執行看看@@
04/14 22:18, 36F

04/14 22:58, , 37F
PHP大猜謎 我投BOM一票 :D
04/14 22:58, 37F

04/14 23:21, , 38F
dio833...也試過了...一樣耶
04/14 23:21, 38F

04/15 00:20, , 39F
影片我看了,你不該用Developer Tools來看,要看的是生成的
04/15 00:20, 39F

04/15 00:20, , 40F
原始碼,透過developer tools看的東西,是經過整理過後的
04/15 00:20, 40F

04/15 00:21, , 41F
這樣很容易造成雞同鴨講的狀況,你應該是透過php生成的原始
04/15 00:21, 41F

04/15 00:22, , 42F
HTML程式拿來找問題,而不要聚焦在DOM工具上,所有的DOM都
04/15 00:22, 42F

04/15 00:23, , 43F
有一定的容錯性跟解讀HTML的方式,你的重點要擺在php將你的
04/15 00:23, 43F

04/15 00:24, , 44F
純文字檔改變了什麼!也就是你講兩次結果的純文字檔拿來比較
04/15 00:24, 44F

04/15 00:26, , 45F
,看看兩個純文字檔差別在哪裡,再透過差別去判斷問題。
04/15 00:26, 45F

04/15 00:30, , 46F
....請問,該怎麼看呢?sorry~我是自學的~有點弱XD
04/15 00:30, 46F

04/15 00:35, , 47F
http://ppt.cc/oIhW 網民類似問題
04/15 00:35, 47F

04/15 00:35, , 48F
http://ppt.cc/dHUD 網民類似問題二
04/15 00:35, 48F

04/15 00:36, , 49F
http://ppt.cc/l0~9 網民類似問題三
04/15 00:36, 49F

04/15 01:20, , 50F
我以前被DOM婊到兩次 第一次在php裡 第二次更玄在gif裡
04/15 01:20, 50F

04/15 01:22, , 51F
第一次我把輸出檔案save as存下來用hex editor看
04/15 01:22, 51F

04/15 01:22, , 52F
第二次我把gif拿來用hex editor看 所以-就是這樣!
04/15 01:22, 52F

04/15 10:02, , 53F
用notepad++ 開起來後,編碼有uft-8 NO BOM,再另存
04/15 10:02, 53F

04/15 10:03, , 54F
這是如果有遇到樓上說的BOM時可以測試的方法之一~
04/15 10:03, 54F

04/15 12:51, , 55F
按照kerash的notepad++方法測試,我的問題解掉了!
04/15 12:51, 55F

04/15 12:52, , 56F
所以真的是因為看不見的"東西"造成的"編譯"錯誤?!
04/15 12:52, 56F

04/15 12:54, , 57F
有建議的Hex Editor嗎?(我查到Hex Editor XVI32推嗎?
04/15 12:54, 57F

04/15 13:11, , 58F
還有,檔首「有BOM」改成「無BOM」後,會有其他影響嗎?
04/15 13:11, 58F

04/15 13:12, , 59F
google一下後,只能說真的好複雜...有較簡潔的敘述嗎?
04/15 13:12, 59F

04/15 13:12, , 60F
謝謝所有熱心的各位,受小弟一大拜!
04/15 13:12, 60F

04/15 13:43, , 61F
其實這問題我很久以前就遇過,所以一開始就覺得是bom。
04/15 13:43, 61F

04/15 15:17, , 62F
任何hex editor都可以,能看的就好了。絕不要把BOM直接
04/15 15:17, 62F

04/15 15:18, , 63F
修掉,用文字editor轉換就可以。我都用total commander
04/15 15:18, 63F

04/15 15:18, , 64F
贈送的viewer。
04/15 15:18, 64F
※ 編輯: ontario 來自: 219.84.60.175 (04/16 13:22)

04/16 13:23, , 65F
非常感謝各位!希望以後有遇到類似問題者可以參考這兒。
04/16 13:23, 65F

05/21 16:31, , 66F
05/21 16:31, 66F
文章代碼(AID): #1FYNiwqX (PHP)
文章代碼(AID): #1FYNiwqX (PHP)