2012-07-30 34 views
9

Mam następujący adres URL: $url = 'http://mysite.com/?p=welcome&x=1&y=2';Jak zdekodować & z adresu URL, tak że główka() działa (urldecode nie działa)

muszę rozszyfrować go tak, że header("Location: $url"); faktycznie działa.

Jednak użycie urldecode($url) nie pracuje, bo to nie dekodowania & ->& a więc przeglądarka jest uzyskiwanie przekierowany do http://mysite.com/?p=welcome&x=1&y=2 który kończy się niepowodzeniem.

muszę go rozszyfrować tak, że wygląda tak: http://mysite.com/?p=welcome&x=1&y=2

Jak mam to zrobić?

+1

Jeśli powyższe NIE jest literówką: powinno to być 'header (" Location: $ url ")' - zanotuj ':'. –

+0

@Marc B: Dzięki, był tu tylko literówka, nie w moim scenariuszu. Naprawiłem to powyżej. – ProgrammerGirl

Odpowiedz

19

spróbuj htmlspecialchars_decode

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

Jaka jest różnica między 'htmlspecialchars_decode' polecasz i' html_entity_decode' wszyscy inni polecają? Którego powinienem użyć? – ProgrammerGirl

+1

@ Programator 'html_entity_decode' służy do dekodowania dużych ciężarów, na przykład do' '' '' ← '. 'htmlspecialchars_decode' służy tylko do usuwania zszytego html, dekoduje tylko znaki niezbędne do ucieczki html. 'htmlspecialchars_decode' jest semantycznie bardziej poprawny do użycia tutaj. – Esailija

+1

Możesz zobaczyć przykład tutaj: http://codepad.org/Mv3vtrYZ – Esailija

4

Chciałbym spróbować tego:

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

zaczerpnięte z http://php.net/manual/en/function.html-entity-decode.php

bym nie tak „spowodować $url nie jest URL zakodowane ale html zakodowany z html znaki specjalne zastąpione odpowiednią encją html.