我们的部分网络应用程序有一个小的Ajax方法,可以在iFrame中加载页面或允许您下载它。
我们存储了一堆搜索引擎的搜索结果,我们有脚本打开包含我们的信息和搜索html的文件。我们从顶部删除了我们不需要的东西(我们的信息),然后我们通过回显$ html变量或将其放入临时文件并将其下载以进行下载来提供。
问题:我在iFrame中加载页面,并且它以UTF-8加载,因为其他一切都是。如果我手动下载文件,那很好,FF告诉我,编码是x-gbk。
我尝试过使用mb_convert_encoding无济于事。我们在这台服务器上使用PHP4。
思想?
编辑:驱动此代码的代码
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;
}
答案 0 :(得分:2)
你可能想尝试iconv()而不是mb_convert_encoding() - 它支持更广泛的编码。