使用社交共享编码的Actionscript问题

时间:2010-04-08 18:32:18

标签: actionscript-3 encoding twitter social-networking

我正在尝试在我的网站上创建一些“社交分享”按钮,但我生成的网址并没有被这些服务解码。

一个例子,对于twitter:

private function twitter(e:Event):void {
  var message:String = "Message with special chars âõáà";
  var url:String = "http://www.twitter.com/home?status=";
  var link:URLRequest = new URLRequest( url + escape(message) );
}

但是当twitter打开时,消息是:

  

带有特殊字符的消息   %E2%F5%E1%E0

Facebook和Orkut发生了类似情况(但这两个隐藏了特殊字符)。

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

问题是escape()函数不考虑UTF-8 enconding。使用UTF-8编码查询字符串所需的函数是encodeURIComponent()

所以,假设你有一个“ñ”(西班牙语,或者n加代)。我正在使用“ñ”,因为我记得它的代码点和它的UTF-8表示,因为我总是用它来进行调试,但这同样适用于其他非ASCII,非字母数字的数字。

假设您有字符串“Año”(顺便说一下,西班牙语为“年份”)。

代码点(Unicode和iso-8859-1)是:

A: 0x41
ñ: 0xf1
o: 0x6f

如果你调用escape(),你会得到这个:

A: A
ñ: %F1
o: o

“A”和“o”不需要编码。 “ñ”编码为“%”加上其代码点,即0xf1。

但是,推特,脸书等等,期待UTF-8。 0xf1不是有效的UTF-8序列,应该用2字节序列表示。含义,“ñ”应编码为:

0xC3
0xB1

这就是encodeURIComponent的作用。它将以这种方式编码“año”:

A: A
ñ: %C3
   %B1
o: o

所以,总而言之,而不是:

 var link:URLRequest = new URLRequest( url + escape(message) );

试试这个

 var link:URLRequest = new URLRequest( url + encodeURIComponent(message) );

它应该可以正常工作。