【问题标题】:Javascript window.open url with spaces and %带有空格和 % 的 Javascript window.open url
【发布时间】:2011-07-16 04:10:11
【问题描述】:

我正在尝试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 中……我认为这些不会影响任何事情。

标签: javascript escaping spaces window.open


【解决方案1】:

您必须对 URL 进行编码。

网址中不能有空格。

因此,浏览器会根据需要重新解释 url 空格,除非你确切地告诉它如何:

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

【讨论】:

  • 身份证。不要在 URL 中使用空格
【解决方案2】:

试试这个:

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 和查询字符串参数的编码。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。似乎如果您使用 url http://www.twitter.com 您的 msg 会被转义两次。如果您查看twitters dev page,他们使用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 或转义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 2010-11-29
      • 2016-04-08
      相关资源
      最近更新 更多