2010-04-08 64 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