2

这是我们问题的第 1 部分(在 Flash 中将动态生成的 XML 文件加载为 PHP)

现在我们能够让 Flash 读取 XML 文件,但我们只能在实际 Flash 程序中测试(测试影片)时正确看到 Flash 渲染。但是,当我们在线上传文件以预览时,Flash 无法正确渲染,丢失了一些重要信息(缩略图、标题、视频等)。

附加信息:

SWF 文件存在于域 1 中 XML 和 PHP 文件都存在于域 2 中并且带有嵌入代码的 HTML 文件位于域 3 中

想知道这是否可能是一个跨域问题?我们在域 1 和 2 上也有这些文件之一,我们也可以访问,但是对于域 3,我们不能在那里有 crossdomain.xml 文件。

这是PHP代码:

$xml = new XMLWriter();
$xml->openMemory();
$xml->setIndent(true);
$xml->setIndentString("\t");
$xml->startDocument();
$xml->startElement('data');
$xml->startElement('config');
    $xml->startElement('hex');
        $xml->writeCData('0x' . $widget_profile['background_color']);
    $xml->endElement();
    $xml->startElement('width');
        $xml->writeCData($widget_profile['width']);
    $xml->endElement();
    $xml->startElement('height');
        $xml->writeCData($widget_profile['height']);
    $xml->endElement();
    $xml->startElement('fullscreen');
        $xml->writeCData('false');
    $xml->endElement();
    $xml->startElement('special');
        $xml->writeCData('false');
    $xml->endElement();
    $xml->startElement('specialName');
        $xml->writeCData('Tools & Offers');
    $xml->endElement();
    $xml->startElement('specialLink');
        $xml->writeCData('XXXXXX');
    $xml->endElement();
    $xml->startElement('client');
        $xml->writeCData($widget_profile['site_url']);
    $xml->endElement();
$xml->endElement();

if (count($widget_content) > 0) {
    foreach ($widget_content as $tab) {
        $xml->startElement('tab');
        $xml->writeAttribute('id', $tab['tabname']);

        if (count($tab['video']) > 0) {
            foreach ($tab['video'] as $video) { 
                $video_sql = "select VID, flvdoname, title
                              from video 
                              where VID='" . $video . "'";

                $video_result = $howdini->query($video_sql);

                if ($video_result->rowCount() > 0) {
                    foreach ($video_result as $video_row) {

                        $video_row['flvdoname'] = substr($video_row['flvdoname'], 35, -4);

                        $xml->startElement('vid');
                        $xml->writeAttribute('flv', $video_row['flvdoname']);
                        $xml->writeAttribute('thumb', 'XXXXXXXXX' . $video_row['VID'] . '.jpg');
                        $xml->writeAttribute('title', $video_row['title']);
                        $xml->endElement();
                    }
                }

            }
        }

        $xml->endElement();
    }
}
$xml->endElement();
$xml->endDocument();
header('Content-Type: text/xml; charset=UTF-8');
echo $xml->flush();

提前感谢您的任何答案!编辑:我已经包含了更改,现在 Firebug 看到了 XML。现在它只是看不到 swf 文件,但我可以在页面的其他部分看到 swf 文件。

4

2 回答 2

1

不是一个完整的解决方案,而只是一个数据点(因为编码问题很糟糕)。当我通过静态文件和 PHP 文件下载您的 XML 并对其进行比较时,我得到以下结果

% diff php.xml static.xml
1c1
< <?xml version="1.0"?>
---
> <?xml version="1.0"?>
10a11
>
19a21
>

您的静态文件的开头有一个额外的“非 ASCII”字符。

我的猜测是你的静态 XML 文件有一个 PHP 生成的文件没有的 UTF-8 BOM,并且你的 Flash 电影需要一个 UTF-8 文件。我会尝试用你的 PHP XML 文件生成一个 BOM并看到它有帮助,或者摆弄你的服务器的编码设置。

尝试更改您的 PHP,使其输出以下标题(与嵌入电影的网页相匹配)。

header('Content-Type: text/html; charset=UTF-8') 
于 2010-03-09T23:23:33.427 回答
1

我想这就是答案。我需要将 charset=UTF-8 添加到我的 php.ini 文件中。现在一切似乎都按计划进行。

于 2010-03-10T21:18:05.937 回答