Проблемы ActionScript с кодировкой социальных сетей - PullRequest
1 голос
/ 08 апреля 2010

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

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

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 (но эти два скрывают специальные символы).

Кто-то знает, почему это происходит?

1 Ответ

0 голосов
/ 09 апреля 2010

Проблема в том, что функция escape () не принимает во внимание UTF-8. Функция, которую вы хотите для кодирования строки запроса с использованием UTF-8: encodeURIComponent () .

Итак, допустим, у вас есть «ñ» (eñe по-испански или 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) );

И все должно работать нормально.

...