Я пытаюсь window.open с URL-адресом с пробелами:
window.open
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.
http://twitter.com/share?text=Hello,%2520world!&url=http://yoursite.com
Что происходит, так это то, что пробел в msg преобразуется в% 20, затем «%» преобразуется в% 25.В качестве обходного пути я добавил:
msg = msg.replace(/\s/g, '+');
Но есть ли другие символы, на которые мне нужно обратить внимание, или есть лучший обходной путь?
Попробуйте вместо этого:
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 и кодировку параметров строки запроса.
У меня была такая же проблема.Кажется, что если вы используете URL http://www.twitter.com, ваш MSG будет экранирован дважды.Если вы посмотрите на страницу разработчика твиттера , они используют https://twitter.com.
http://www.twitter.com
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 в вашем сообщении.
Вы должны кодировать URL.
В URL не должно быть пробелов.
Поэтому браузер переинтерпретирует пробелы в URL-адресах так, как он хочет, если вы точно не скажете:
var msg = 'Hello,%20world!';