只會(huì)在chrome和edge瀏覽器出現(xiàn),ff則不會(huì)出現(xiàn)這個(gè)問(wèn)題。由于該頁(yè)面是由PHP+HTML模板拼接接,因此先后排查了html文件、JavaScript文件、php文件。均未發(fā)現(xiàn)問(wèn)題。
使用chrome F12發(fā)現(xiàn)空白處是一串字符。通過(guò)搜索,了解到這原來(lái)是UTF-8的編碼問(wèn)題。
我使用的編碼是UTF-8 + BOM,這種編碼方式一般會(huì)在windows操作系統(tǒng)中出現(xiàn),比如WINDOWS自帶的記事本等軟件,在保存一個(gè)以UTF-8編碼的文件時(shí),會(huì)在文件開(kāi)始的地方插入三個(gè)不可見(jiàn)的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符,用于讓記事本等編輯器識(shí)別這個(gè)文件是否以UTF-8編碼。對(duì)于一般的文件,這樣并不會(huì)產(chǎn)生什么麻煩。但對(duì)于 PHP來(lái)說(shuō),BOM是個(gè)大麻煩。因?yàn)镻HP并不會(huì)忽略BOM,所以在讀取、包含或者引用這些文件時(shí),會(huì)把BOM作為該文件開(kāi)頭正文的一部分。根據(jù)嵌入式語(yǔ)言的特點(diǎn),這串字符將被直接執(zhí)行(顯示)出來(lái)。
知道問(wèn)題的原因之后,便很好解決了。
新建一個(gè)文件 bom.php放在根目錄下,代碼如下,執(zhí)行即可!<?php
//remove the utf-8 boms//by magicbug at gmail dot comif (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);}?>
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇