2012-07-30 39 views
9

Tôi có URL sau: $url = 'http://mysite.com/?p=welcome&x=1&y=2';Làm thế nào để giải mã các & từ một URL để header() hoạt động (urldecode không làm việc)

tôi cần phải giải mã nó để header("Location: $url"); thực sự hoạt động.

Tuy nhiên, sử dụng urldecode($url) không hoạt động bởi vì nó không giải mã & ->& và do đó trình duyệt bị chuyển hướng đến http://mysite.com/?p=welcome&x=1&y=2 mà thất bại.

tôi cần nó để giải mã để nó trông giống như: http://mysite.com/?p=welcome&x=1&y=2

Làm thế nào để làm điều đó?

+1

Trong trường hợp ở trên KHÔNG phải là lỗi đánh máy: nó phải là 'tiêu đề (" Vị trí: $ url ")' - lưu ý ':'. –

+0

@Marc B: Cảm ơn, chỉ là một lỗi đánh máy ở đây, không phải trong kịch bản của tôi. Chỉ cần sửa nó ở trên. – ProgrammerGirl

Trả lời

19

Hãy thử với htmlspecialchars_decode

echo htmlspecialchars_decode('http://mysite.com/?p=welcome&x=1&y=2'); 
//"http://mysite.com/?p=welcome&x=1&y=2" 
+2

Sự khác nhau giữa 'htmlspecialchars_decode' mà bạn đang đề xuất và' html_entity_decode' mà mọi người khác đang đề xuất là gì? Tôi nên sử dụng cái nào? – ProgrammerGirl

+1

@Programmer 'html_entity_decode' dành cho giải mã thực thể nặng, chẳng hạn như chuyển' ← 'thành' ← '. 'htmlspecialchars_decode' chỉ dành cho unstcaping escaped html, nó chỉ giải mã các ký tự cần thiết để thoát khỏi html. 'htmlspecialchars_decode' là ngữ nghĩa chính xác hơn để sử dụng ở đây imo. – Esailija

+1

Bạn có thể xem ví dụ tại đây: http://codepad.org/Mv3vtrYZ – Esailija

4

Tôi muốn thử điều này:

$url = html_entity_decode($url); 
header("Location: $url"); 

lấy từ http://php.net/manual/en/function.html-entity-decode.php

Tôi muốn làm như vậy 'gây bạn $url không url-mã hóa nhưng html mã hóa, với html ký tự đặc biệt được thay thế bằng thực thể html tương ứng.