2010-04-08 1 views
1

Я пытаюсь сделать некоторые кнопки «социальной доли» на моем сайте, но созданные мной URL-адреса просто не декодируются этими службами.Actionscript проблемы с социальной кодировкой общего доступа

Один примера, для твиттера:

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. Функция, которую вы хотите для кодирования запроса с использованием UTF-8, - encodeURIComponent().

Итак, предположим, что у вас есть «ñ» (энь на испанском языке, или n плюс тильда). Я использую «-», потому что я помню как его кодовую точку, так и ее представление UTF-8, так как я всегда использую ее для отладки, но то же самое относится к другому не-ASCII, не буквенно-цифровому номеру.

Скажем, у вас есть строка «Año» («год» на испанском языке, между прочим).

Точки кода (как в Unicode и ISO-8859-1) являются:

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

Если вы звоните побег(), вы получите это:

A: A 
ñ: %F1 
o: o 

"А" и «o» не нужно кодировать. «Ñ» кодируется как «%» плюс его кодовая точка, которая равна 0xf1.

Но, твиттер, 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, но щебетать по-прежнему показывает мое сообщение как: Сообщение% 20with% 20special% 20chars% 20% C3% A2% C3% B5% C3% A1% C3% A0 теперь отображая символы в кодировке UTF-8. – Rittmeyer

+0

Я нашел решение для этой другой проблемы. Похоже, вам нужно использовать http://twitter.com/ вместо http://www.twitter.com/ – Rittmeyer

+0

Мммм, это странно. Я использовал этот код для публикации обновлений в twitter и не имел проблем. –