2010-04-08 65 views
1

我试图在我的网站上创建一些“社交分享”按钮,但是我生成的网址并未被此服务解码。社交分享编码的Actionscript问题

一个例子,对于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)); 
} 

但当叽叽喳喳打开时,该消息是:

信息与特殊字符 %E2%F5%E1%E0

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

有人知道为什么会发生这种情况?

回答

0

问题是,escape()函数没有考虑到UTF-8的enconding。你想用UTF-8编码查询字符串的函数是encodeURIComponent()

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

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

代码点(无论是在Unicode和ISO-8859-1)是:

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

如果调用越狱(),你会得到这样的:

A: A 
ñ: %F1 
o: o 

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

但是,Twitter,Facebook等,预计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)); 

,它应该工作的罚款。

+0

谢谢,这真是帮了我与Facebook和Orkut,但Twitter仍显示我的消息: 消息%20with%20special%20chars%20%C3%A2%C3%B5%C3%A1%C3%A0 现在以UTF-8编码显示字符。 – Rittmeyer 2010-04-09 12:28:07

+0

我找到了解决其他问题的解决方案。似乎你必须使用http://twitter.com/而不是http://www.twitter.com/ – Rittmeyer 2010-04-09 12:59:31

+0

嗯,这很奇怪。我已经使用这段代码发布Twitter的更新并没有问题。 – 2010-04-09 13:01:54