2

これが問題のパート 1 (動的に生成された XML ファイルを PHP として Flash にロードする)です。

これで、Flash に XML ファイルを読み取らせることができましたが、実際の Flash プログラムからテスト (テスト ムービー) した場合にのみ、Flash が正しくレンダリングされることを確認できます。ただし、ファイルをオンラインでアップロードしてプレビューすると、Flash が正しくレンダリングされず、いくつかの重要な情報 (サムネイル、タイトル、ビデオなど) が失われます。

追加情報:

ドメイン 1 に SWF ファイルが存在する ドメイン 2 に XML と PHP ファイルの両方が存在し、埋め込みコードを含む HTML ファイルがドメイン 3 に存在する

これがクロスドメインの問題である可能性があるかどうか疑問に思っていますか? これらのファイルの 1 つをドメイン 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 を変更してみてください (ムービーが埋め込まれている Web ページと一致します)。

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

それが答えだったと思います。php に charset=UTF-8 を追加する必要がありました。現在、すべてが計画どおりに機能しているようです。

于 2010-03-10T21:18:05.937 に答える