2013-03-21 33 views
6

Tôi có một url nhưget http tham số url mà không tự động giải mã sử dụng PHP

test.php?x=hello+world&y=%00h%00e%00l%00l%00o 

khi tôi viết nó để nộp

file_put_contents('x.txt', $_GET['x']); // -->hello world 
file_put_contents('y.txt', $_GET['y']); // -->\0h\0e\0l\0l\0o 

nhưng tôi cần phải ghi nó vào mà không cần mã hóa

file_put_contents('x.txt', ????); // -->hello+world 
file_put_contents('y.txt', ????); // -->%00h%00e%00l%00l%00o 

Tôi có thể làm như thế nào?

Cảm ơn

Trả lời

4

Bởi vì The $_GET$_REQUEST superglobals sẽ được tự động chạy qua một chức năng giải mã (tương đương với urldecode()), bạn chỉ cần để tái urlencode() dữ liệu để làm cho nó phù hợp với các nhân vật thông qua trong chuỗi URL :

file_put_contents('x.txt', urlencode($_GET['x'])); // -->hello+world 
file_put_contents('y.txt', urlencode($_GET['y'])); // -->%00h%00e%00l%00l%00o 

Tôi đã thử nghiệm tính năng này tại địa phương và hoạt động hoàn hảo. Tuy nhiên, từ nhận xét của bạn, bạn cũng có thể muốn xem cài đặt mã hóa của mình. Nếu kết quả của urlencode($_GET['y'])%5C0h%5C0e%5C0l%5C0l%5C0o sau đó nó xuất hiện rằng null character rằng bạn đang đi qua trong (%00) đang được hiểu là một chuỗi chữ "\0" (giống như một nhân vật \ nối đến một nhân vật 0) thay vì giải thích một cách chính xác các \0 dưới dạng đĩa đơn null ký tự.

Bạn nên xem qua số PHP documentation on string encoding and ASCII device control characters.

+0

không hoạt động. nó trở về x -> hello + world, y ->% 5C0h% 5C0e% 5C0l% 5C0l% 5C0o – user1725661

+0

@ user1725661 - Sau đó, một cái gì đó khác đang xảy ra. Tôi chỉ thử nghiệm này và nó hoạt động tốt ... xem câu trả lời mở rộng của tôi. –

0

tôi nghĩ bạn có thể sử dụng urlencode() để chuyển giá trị trong URL và urldecode() để nhận giá trị.

+0

không hoạt động. nó trở lại x -> hello + world, y ->% 5C0h% 5C0e% 5C0l% 5C0l% 5C0o – user1725661

3

Bạn có thể nhận các giá trị không được mã hóa từ biến $ _SERVER ["QUERY_STRING"].

function getNonDecodedParameters() { 
    $a = array(); 
    foreach (explode ("&", $_SERVER["QUERY_STRING"]) as $q) { 
    $p = explode ('=', $q, 2); 
    $a[$p[0]] = isset ($p[1]) ? $p[1] : ''; 
    } 
    return $a; 
} 

$input = getNonDecodedParameters(); 
file_put_contents('x.txt', $input['x']); 
+0

Đây là câu trả lời đúng, vì việc mã hóa lại được đề xuất bởi Ben D. xử lý một số ký tự (như dấu gạch chéo) khác nhau. –

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