JavaScript中如何使用window.open打开包含空格和%的URL?

9

我正在尝试使用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
发生的情况是msg中的空格被转换为%20,然后'%'被转换为%25。为了解决这个问题,我添加了以下代码: msg = msg.replace(/\s/g, '+'); 但是还有其他字符需要注意吗?或者有更好的解决方法吗?

我忘了提到我正在使用Drupal和jQuery。这段代码被包含在Drupal.behaviors中...虽然我认为这些不会影响任何东西。 - nymo
3个回答

15

可以尝试使用这个方法:

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); 

注意 Twitter URL 的不同以及查询字符串参数的编码方式。


0

我曾经遇到过同样的问题。看起来如果你使用的是http://www.twitter.com,那么你的消息会被转义两次。如果你查看Twitter开发页面,他们使用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

你必须对URL进行编码。

URL中不能有任何空格。

因此,除非你明确告诉浏览器如何处理,否则浏览器会按照自己的方式重新解释URL中的空格:

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

不知道,不要在你的URL中使用空格。 - Naftali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接