October 14, 2007
鼓勵此網誌:0
這問題真是讓人頭大
原本網頁預設編碼為 utf-8
但使用 session 時會出現下面的錯誤
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
後來在 google 上發現把編碼改成 big5 就不會出現這問題
但改成 big5 後,每一頁的上面都會出現"嚜?"的亂碼
不管怎麼弄都消不掉 ~"~ 瀕臨崩潰
終於找到如何解決出現"嚜?"亂碼的方法
資料來源:http://blog.udn.com/junesnow17/1083113
以下資料皆引用自 http://blog.udn.com/junesnow17/1083113
該站內有更詳細的說明 (灰色字體為引用文)
解決辦法:
1. 不要使用Notepad編寫PHP程式。
2. 利用以下程式碼去除檔案中的BOM檔頭,在有可能的資料夾中都要執行一次此程式。例如將此程式放在html底下並取名為BOMdel.php。
3. 執行http://example.askmorris.org/BOMdel.php
<?
//此文件可自動查詢文件中是否含有BOM,並可自動移除
$basedir="."; //修改此行為需要查詢的目錄 . 為目前的目錄
$auto=1; //是否自動移除BOM檔頭,1為是,0為否
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")." <br>";
}
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);
}
?>



