Javascript window.open URL с пробелами и% - PullRequest
7 голосов
/ 16 марта 2011

Я пытаюсь window.open с URL-адресом с пробелами:

var msg = 'Hello, world!';  
var url = 'http://yoursite.com';  
var link = 'http://www.twitter.com/share?text=' + msg + '&url=' + url; 
window.open(link);

Запуск этого кода откроет новое окно с http://twitter.com/share?text=Hello,%2520world!&url=http://yoursite.com.

Что происходит, так это то, что пробел в msg преобразуется в% 20, затем «%» преобразуется в% 25.В качестве обходного пути я добавил:

msg = msg.replace(/\s/g, '+');

Но есть ли другие символы, на которые мне нужно обратить внимание, или есть лучший обходной путь?

Ответы [ 3 ]

11 голосов
/ 20 июля 2011

Попробуйте вместо этого:

var msg = encodeURIComponent('Hello, world!');  
var url = encodeURIComponent('http://www.google.com');  
var link = 'http://twitter.com/intent/tweet?text=' + msg + '&url=' + url; 
window.open(link); 

Обратите внимание на другой URL Twitter и кодировку параметров строки запроса.

0 голосов
/ 04 февраля 2012

У меня была такая же проблема.Кажется, что если вы используете URL http://www.twitter.com, ваш MSG будет экранирован дважды.Если вы посмотрите на страницу разработчика твиттера , они используют https://twitter.com.

. Для вашего кода удалите www , и я думаю, что будет полезно использовать https. вместо http

var msg = 'Hello, world!';  
var url = 'http://yoursite.com';  
var link = 'https://twitter.com/share?text=' + msg + '&url=' + url; 
window.open(link);

Вам даже не нужно использовать encodeURI или escape в вашем сообщении.

0 голосов
/ 16 марта 2011

Вы должны кодировать URL.

В URL не должно быть пробелов.

Поэтому браузер переинтерпретирует пробелы в URL-адресах так, как он хочет, если вы точно не скажете:

var msg = 'Hello,%20world!';
...