如何通过SWFObject将PHP变量作为FlashVars传递

时间:2010-05-24 19:43:02

标签: php flash swfobject actionscript-3

我正在尝试使用PHP变量并通过Flash变量将其传递给Flash。我的最终目标是将格式化为XML的字符串传递给Flash,但由于我在苦苦挣扎,所以我已经将所有内容都删除了。我只是试图通过带有SWFObject的FlashVars将一个简单的PHP字符串变量传递给Flash,但有些事情是不对的。当我尝试在php标签内传递变量时,页面将不会加载,但如果我只传递一个硬编码字符串,它将加载。我的页面的基本结构是我在顶部声明了一些PHP:

PHP

<?php
     $test = "WTF";
?>

一些HTML(为简单起见,此处排除),然后嵌入我的HTML中的JavaScript SWFObject:

    <script type="text/javascript" src="js/swfobject2.js"></script>
    <script type="text/javascript">
        // <![CDATA[
        var swfURL = "swfs/Init-Flash-PHP.swf";

        var flashvars = {};
            flashvars.theXML = <?php print $test ?>;

        var params = {};
            //params.menu = "false";
            params.scale = "showAll";
            params.bgcolor = "#000000";
            params.salign = "TL";
            //params.wmode = "transparent";
            params.allowFullScreen = "true";
            params.allowScriptAccess = "always";

        var attributes = {};
            attributes.id = "container";
            attributes.name = "container";


        swfobject.embedSWF(swfURL, "container", '100%', '100%', "9.0.246", "elements/swfs/expressinstall.swf", flashvars, params, attributes);


        // ]]>
</script>

ActionScript 3代码的基本要点:

_paramObj = LoaderInfo(stage.loaderInfo).parameters;
theText_txt.text = _paramObj['theXML'];

如何使用SWFObject和FlashVars传递PHP变量?

感谢。

2 个答案:

答案 0 :(得分:3)

呃,我需要逃离Flash变种才有效。

对于任何有兴趣的人来说,这就是我需要改变的地方

flashvars.theXML = <?php print $test ?>;

对此:

flashvars.theXML = escape('<?php print $test ?>');

答案 1 :(得分:1)

escape()不是逃避的简单方法(!)

改为使用encodeURIComponent()。

这是来自FAQ的第9点:http://code.google.com/p/swfobject/wiki/faq

  
      
  1. 如何使用flashvars将URI或HTML代码作为值传递?
  2.         

    特殊字符和符号=   和&amp;不能直接在里面使用   flashvars值(后者因为   它们用于堆叠flashvars   本身)。

         

    您可以解决此问题   之前逃避这些角色   将它们作为flashvar值传递。一个   例如:

         

    encodeURIComponent(“&amp; trade”)将   成为%26trade

         

    这些值将在您的   swf已经没有编码,所以没有   你的瑞士法郎需要进行无聊。

         

    请注意,encodeURIComponent不是   适用于所有浏览器,但是   提供所有常见的现代   版本。如果你需要完全倒退   兼容性,你可以使用escape()   相反,但请注意escape()的确如此   双字节不能很好地工作   人物(如中文)。

         

    您也可以转义这些字符   手动使用:

    * %3D instead of =
    * %26 instead of &