2010-08-22 39 views
6

tôi đang cố gắng để thực hiện một bookmarklet sử dụng URL hiện tại của người dùng, loại giống như bookmarklet URL nhỏ có sử dụng mã javascript nàyĐi qua một URL như một tham số GET trong Javascript

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

Vì vậy, tôi sao chép rằng điều tương tự và làm

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

Sau đó, tôi sử dụng:

$url=$_GET['url']; 

để lấy nó. Vấn đề là, nếu tôi đang trên một url đã có một số nhận được thông tin phong cách trong url, nó messes tất cả mọi thứ lên.

Ví dụ, Nếu tôi trên:

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

Mã '_GET' bộ $ url là

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

Vì vậy, tôi nghĩ rằng các thông tin trong google URL là rối tung lên tất cả các URL của tôi phân tích cú pháp, tôi tưởng tượng tôi đang làm một cái gì đó rất không chính xác hoặc ai đó có một giải pháp rất thanh lịch cho việc này. Tôi nên làm gì? hãy giúp

+0

Làm thế nào bạn bị tước bỏ '& hl = vi & safe = off' nhưng không phải là' um = 1'? – NullUserException

+0

@NullUserException: Tôi cho rằng điều này là do đó '?' Đã tồn tại trong URL và trình duyệt/máy chủ có thể coi cái thứ hai là char "bình thường". – Crozin

Trả lời

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

Bạn cần thoát khỏi các ký tự.

1

Hãy thử

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

vì vậy những gì được bạn muốn, chỉ url mà không có chuỗi truy vấn?

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

URL có định dạng được chỉ định. Phần đó sau ? hoặc chính xác hơn giữa ?# nếu tồn tại, được gọi là query string. Nó chứa danh sách các cặp khóa-giá trị - một tên biến, = ký tự và giá trị. Biến được ngăn cách bởi &:

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

Bạn nên thoát location.href vì nó thể chứa một số ký tự đặc biệt như ?, & hoặc #.

Để thoát khỏi chuỗi trong JavaScript sử dụng encodeURIComponent() chức năng như vậy:

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

Nó sẽ thay thế các nhân vật như & vào %26. Chuỗi ký tự đó không được coi là dấu tách biến vì vậy nó sẽ được gắn vào như giá trị của biến.

+0

Cảm ơn, có vẻ dễ dàng. Cách thích hợp để giải mã này trong PHP sau đó là gì? – MikeD

+1

Bạn không cần phải làm như vậy. '$ _GET ['url']' sẽ chứa giá trị thích hợp, tức là. 'http: //..../...html? abc = def & write = 123'. Tuy nhiên PHP cũng giống như JavaScript với một số hàm để thoát URL: ['urlencode()'] (http://pl.php.net/manual/en/function.urlencode.php). – Crozin

+1

@MikeD Tôi biết đó là một chút cũ, nhưng tôi nghĩ bạn nên chấp nhận câu trả lời này :) – AbdelHady

0

Để vượt qua url trong tham số _GET $ như thế này:

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

thì bạn cần phải sử dụng mã hóa chức năng:

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 

sau đó, bạn cần phải giải mã các thông số với:

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

như vậy, bạn có thể chuyển liên kết chính xác làm thông số.

Các vấn đề liên quan