2010-08-22 26 views
6

que estoy tratando de hacer un bookmarklet que utiliza URL actual del usuario, algo así como el bookmarklet TinyUrl que utiliza este código Javascriptpasar una URL como parámetro GET en Javascript

javascript:void(location.href='http://tinyurl.com/create.php?url='+location.href) 

Así que copian la misma cosa e hizo

javascript:void(location.href='http://mywebsite.com/create.php?url='+location.href) 

Luego uso:

$url=$_GET['url']; 

para recuperarlo. El problema es que si estoy en una url que ya tiene alguna información de estilo de get en la url, lo estropea todo.

ejemplo, si estoy en:

http://www.google.ca/webhp?um=1&hl=en&safe=off 

El código '_GET' establece $ url para ser

http://www.google.ca/webhp?um=1 

Así que creo que la información en Google URL es echar a perder toda mi URL Al analizar, imagino que estoy haciendo algo muy incorrecto o que alguien tiene una solución muy elegante para esto. ¿Que debería hacer? ayuda

+0

¿Cómo es que eliminaste '& hl = en & safe = off' pero no' um = 1'? – NullUserException

+0

@NullUserException: Supongo que esto se debe a que '?' Ya existe en la URL y el navegador/servidor podría tratar al segundo como char "normal". – Crozin

Respuesta

0
javascript:void(location.href='http://mywebsite.com/create.php?url='+encodeURIComponent(location.href)) 

Tienes que escapar de los caracteres.

1

Trate

javascript:void(location.href='http://mywebsite.com/create.php?url='+encodeURIComponent(location.href)); 
0

¿A qué estás deseando, sólo la url sin la cadena de consulta?

$url = explode('?',$_GET['url']); 
$url = $url[0]; 
11

URL tiene un formato específico. Esa parte después de ?, o para ser más exactamente entre ? y si existe, se llama query string. Contiene una lista de pares clave-valor: un nombre de variable, un carácter = y el valor. Las variables están separados por &:

key1=value1&key2=value2&key3=value3&key4=value4 

Usted debe escapar location.href ya que puede contiene algunos caracteres especiales como ?, & o #.

Para escapar cadena en JavaScript utilizar encodeURIComponent() función de este modo:

location.href = "http://tinyurl.com/create.php?url=" + encodeURIComponent(location.href) 

Sustituirá a personajes como & en %26. Esa secuencia de caracteres no se trata como un separador de variables, por lo que se adjuntará como el valor de una variable.

+0

Gracias, parece bastante fácil. Entonces, ¿cuál es la forma correcta de decodificar esto en PHP? – MikeD

+1

No es necesario. '$ _GET ['url']' contendrá el valor adecuado, es decir. 'http: //..../...html? abc = def & ghi = 123'. Sin embargo, PHP viene igual que JavaScript con varias funciones para el escape de URL: ['urlencode()'] (http://pl.php.net/manual/en/function.urlencode.php). – Crozin

+1

@MikeD Sé que es un poco viejo, pero creo que deberías aceptar esta respuesta :) – AbdelHady

0

Para pasar URL en el parámetro _GET $ como esto:

http://yoursite.com/page.php?myurl=http://google.com/bla.php?sdsd=123&dsada=4323 

entonces es necesario utilizar la función de codificación:

echo 'http://yoursite.com/page.php?url='.urlencode($mylink); 

//so, your output (url parameter) will get like this 
//http://yoursite.com/page.php?url=http%3A%2F%2Fgoogle.com%2Flink.php%3Fname%3Dsta%26car%3Dsaab 

después de eso, es necesario descodificar el parámetro con:

$variab = $_GET['url']; 
$variab = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($variab)); 
$variab = html_entity_decode($variab,null,'UTF-8'); 
echo $variab; 

de esta manera, puede pasar el enlace correcto como parámetro.

Cuestiones relacionadas