PHP UTF-8 до GB2312 - PullRequest
       4

PHP UTF-8 до GB2312

2 голосов
/ 16 июля 2010

Часть нашего веб-приложения имеет небольшой метод 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;
}

1 Ответ

2 голосов
/ 15 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...