How to pass PHP variable as FlashVars via SWFObject

霸气de小男生 提交于 2019-12-06 13:58:13

问题


I am trying to take a PHP variable and pass it along to Flash via Flash vars. My end goal is to pass a string formatted as XML to Flash, but because I'm struggling I've stripped everything down to the basics. I'm just trying to pass a simple PHP string variable to Flash via FlashVars with SWFObject but something isn't right. The page won't load when I try to pass the variable inside of php tags, but it will load if I just pass a hard coded string. The basic structure of my page is that I have some PHP declared at the top like so:

PHP

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

Some HTML (excluded here for simplicity sake) and then the JavaScript SWFObject Embed within my HTML:

    <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>

And the bare essentials of the ActionScript 3 Code:

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

How do I pass a PHP variable using SWFObject and FlashVars?

Thanks.


回答1:


Ugh, I needed to escape the Flash vars and it worked.

For anyone that's interested, this is what I needed to change

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

To this:

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



回答2:


escape() is not a foolproof way to escape (!)

Use encodeURIComponent() instead.

This is from point 9 at the FAQ: http://code.google.com/p/swfobject/wiki/faq

  1. How can I pass URIs or HTML code as a value using flashvars?

Special characters and the symbols = and & cannot directly be used inside flashvars values (the latter because they are used to stack the flashvars themselves).

You can workaround this issue by escaping these characters before passing them as flashvar values. An example:

encodeURIComponent("&trade") will become %26trade

The values will be available in your swf already unencoded, so no unescaping is needed inside your swf.

Note that encodeURIComponent is not available in all browsers, but is available in all of the common modern versions. If you need full backwards compatibility, you can use escape() instead, but note that escape() does not work well with double-byte characters (like Chinese).

You can also escape these characters manually by using:

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


来源:https://stackoverflow.com/questions/2899765/how-to-pass-php-variable-as-flashvars-via-swfobject

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!