如何在ActionScript 3 AS3中取消Unicode字符

时间:2011-10-27 16:55:03

标签: flash actionscript-3 unicode escaping

我遇到“&”问题。

基本上我无法在Flash AS3中正确地逃避这一点,但是我确实找到了这个似乎有用的链接: http://www.smithmediafusion.com/blog/?p=343

测试页面: http://touchstormdigital.com/leon/testing/

以下是我目前的职能:

try {
    varHome   = this.loaderInfo.parameters.home;
    homeImage = this.loaderInfo.parameters.homeImage;
    homeTitle = this.loaderInfo.parameters.homeText; // Get the Video Title
    // Title  = "Quick & easy chicken recipes for dinner"
} catch (e:Error) {
    varHome   = "false";
    homeBool  = false;
}

搜索和替换功能:

// Home player test search & replace ampersand
private function replaceString(str:String, find:String, replace:String):String 
{
    var startIndex:Number = 0;
    var oldIndex:Number   = 0;
    var newString:String  = "";

    while ((startIndex = str.indexOf(find, startIndex)) != -1)
    {
        newString += str.substring(oldIndex, startIndex) + replace;
        oldIndex = startIndex += find.length;
    }

    return((newString == "") ? str : newString);
}

然后我如何使用它

private function drawSplash():void
{
    sp = new ScreenButton();

    replaceString(homeTitle,"&", "\\u0026");

    sp.drawScreenButton(playerW, playerH, homeBool, homeImage, homeTitle);
    sp.addEventListener("onPlay", vd.playVideo);
    sp.addEventListener("embedSplash", hideSplash);
    stage.addChild(sp);
}

我认为这就是问题所在:

replaceString(homeTitle,"&", "\\u0026");

我也试过这个:

replaceString(homeTitle,"&", String.fromCharCode(38));

目标 抓住“快速和简单的鸡肉食谱晚餐”并展示它

仍然只显示“快速”

测试页面: http://touchstormdigital.com/leon/testing/


UPDATE!发现了另一个简单的修复,无需更改标题!

除了The_asMan的答案有效,但要求文本/副本写得很奇怪,我发现这个简单的javascript片段可以完成这项工作:

http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp

我是如何使用它的:

<script type="text/javascript">

    var homeText = "Quick & easy - chicken' recipes for dinner?!=+";
    var fixed = encodeURIComponent(homeText);

</script>

然后在Flashvars区域:

so.addVariable("homeText", fixed);

然后在Flash中

unescape(homeTitle);

活泉!

2 个答案:

答案 0 :(得分:2)

尝试unescape(homeTitle)逃避它是你想要的相反方式。

示例:trace(unescape("%26")); //will trace out: &

答案 1 :(得分:1)

这一行显示我正在加载闪存变量。

homeTitle = this.loaderInfo.parameters.homeText;

例如,如果您有这样的网址。

http://somedomain.com?var1=aa&var2=b&var3=c

有3个变量被传递给flash var1,var2,var3
当你这样做

http://somedomain.com?title=Quick & easy chicken recipes for dinner

你正在打破2个点,第一个点是&符号告诉flash有一个新的变量要读取。另一个地方是空格,网址不能有空格。 所以编码的正确方法是

http://somedomain.com?title=Quick%20%26%20easy%20chicken%20recipes%20for%20dinner

然后当然在flash中,unescape()会很完美。

对不起,我应该早点注意到这一点,我没有告诉我数据不存在。