PHP UTF-8 – GB2312

Часть нашего веб-приложения имеет небольшой метод Ajax, который загрузит страницу в iFrame или позволит вам загрузить ее.

Мы храним кучу результатов поиска в поисковых системах, и у нас есть скрипт, который открывает файл, содержащий нашу информацию и поисковый html. Мы снимаем материал, который нам не нужен сверху (наша информация), и затем мы обслуживаем его либо путем эхо-ответа переменной $ html, либо помещаем его во временный файл и выкладываем его для загрузки.

Проблема: я загружаю страницу в iFrame, и она загружается в UTF-8, потому что все остальное. Если я загружу файл вручную, это нормально, и FF сообщает мне, что endoding является x-gbk.

Я пробовал использовать mb_convert_encoding безрезультатно. Мы используем PHP4 на этом сервере.

Мысли?

EDIT: код, который управляет этим

f(!isset($_GET['file']) || $_GET['file'] == '') { header("location:index.php"); } $download = false; if(!isset($_GET['view']) || $_GET['view'] != 'true') { $download = true; } $file = LOG_PATH . $_GET['file']; $fileName = end(explode("/", $file)); $fh = fopen($file, "rb"); if(!$fh) { echo "There was an error in processing this file. Please retry."; return; } // Open HTML file, rip out garbage at top, inject "http://google.com" before all "images/" $html = fread($fh, filesize($file)); fclose($fh); // Need to trim off our headers $htmlArr = explode("<!", $html, 2); $htmlArr[1] = "<!" . $htmlArr[1]; if(strstr($file, "google")) { $html = str_replace('src="/images/', 'src="http://google.com/images/', $htmlArr[1]); $html = str_replace('href="/', 'href="http://google.com/', $html); } else if(strstr($file, "/msn/")) { $html = str_replace('src="/images/', 'src="http://bing.com/images/', $htmlArr[1]); $html = str_replace('href="/', 'href="http://www.bing.com/', $html); } else { $html = $htmlArr[1]; } if(strstr($file, "baidu")) { $html = mb_convert_encoding($html, 'utf-8'); // Does not work } if($download) { // Write to temporary file $fh = fopen("/tmp/" . $fileName, 'w+'); fwrite($fh, $html); fclose($fh); $fh = fopen("/tmp/" . $fileName, "rb"); header('Content-type: application/force-download;'); header("Content-Type: text/html;"); header('Content-Disposition: attachment; filename="' . $fileName . '"'); fpassthru($fh); fclose($fh); unlink("/tmp/" . $fileName); } else // AJAX Call { echo $html; } 

Возможно, вы захотите попробовать iconv () вместо mb_convert_encoding () – он поддерживает гораздо более широкий набор кодировок.