2011-03-15 17 views
7
%

que estoy tratando window.open con una URL con espacios:url window.open Javascript con espacios y

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

La ejecución de este código se abrirá una nueva ventana con http://twitter.com/share?text=Hello,%2520world!&url=http://yoursite.com.

Lo que sucede es que el espacio en msg se convierte a% 20, luego el '%' se convierte a% 25. Como solución, he añadido:

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

Pero hay otros caracteres que necesito a tener en cuenta o hay una mejor solución?

+0

Eso no debería suceder. – SLaks

+0

olvidé agregar que estoy usando Drupal con jQuery. Este código está envuelto dentro de un Drupal.behaviors ... no es que creo que estos afecten a nada. – nymo

Respuesta

0

tiene que codificar las URL.

No puede haber espacios en la URL.

Por lo tanto el navegador reinterpreta los espacios de URL, ya que quiere a menos que usted le indique exactamente cómo:

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

sin dados, el% se convierte en% 25 – nymo

+0

idk. no use espacios en su URL – Neal

+0

sí, de ahí el reemplazo del código '+'. – nymo

10

probar este lugar:

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

Observar los distintos Twitter URL y la codificación de la consulta string params.

0

Tuve el mismo problema. Parece que si usas el url http://www.twitter.com tu mensaje se escapó dos veces. Si mira twitters dev page, usan https://twitter.com.

Para su código, retire el www y yo creo que es bueno utilizar https en lugar de http

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

Usted ni siquiera es necesario utilizar encodeURI o escapar en su mensaje.

Cuestiones relacionadas