2012-07-30 10 views
9

ho il seguente URL: $url = 'http://mysite.com/?p=welcome&x=1&y=2';come decodificare il & da un URL in modo che intestazione() lavora (urldecode non funzionante)

ho bisogno di decodificare in modo che header("Location: $url"); funziona realmente.

Tuttavia, utilizzando urldecode($url) non funziona perché è non decodifica del & ->& e così il browser viene reindirizzato a http://mysite.com/?p=welcome&x=1&y=2 che non riesce.

ho bisogno di decodificare in modo che assomiglia a: http://mysite.com/?p=welcome&x=1&y=2

Come posso fare?

+1

Nel caso in cui NON sia un errore di battitura: dovrebbe essere 'header (" Posizione: $ url ")' - nota ':'. –

+0

@Marc B: Grazie, era solo un errore di battitura qui, non nella mia sceneggiatura. Appena riparato sopra. – ProgrammerGirl

risposta

19

Prova con htmlspecialchars_decode

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

Qual è la differenza tra 'htmlspecialchars_decode' che stai raccomandando e' html_entity_decode' che tutti gli altri raccomandano? Quale dovrei usare? – ProgrammerGirl

+1

@Programmer 'html_entity_decode' è per la decodifica di entità pesante, come ad esempio la rotazione di' ← 'in' ← '. 'htmlspecialchars_decode' è solo per html con escape di escape, decodifica solo i caratteri necessari per uscire da html. 'htmlspecialchars_decode' è semanticamente più corretto da usare qui imo. – Esailija

+1

Puoi vedere l'esempio qui: http://codepad.org/Mv3vtrYZ – Esailija

4

Mi piacerebbe provare questo:

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

tratto da http://php.net/manual/en/function.html-entity-decode.php

farei in modo perche' il tuo $url non è con codifica URL, ma con codifica HTML, con html caratteri speciali sostituiti con l'entità html corrispondente.