2009-11-18 4 views
24

Ich versuche, diese URL-Zeichenfolge mit PHP urldecode Funktion zu entschlüsseln:URL-Decodierung in PHP

urldecode("Ant%C3%B4nio+Carlos+Jobim"); 

Diese ausgeben soll ...

'Antônio Carlos Jobim' 

... sondern dies ouptutting

'Antônio Carlos Jobim' 

ich habe die Saite in einem JS-based online decoder mit großem Erfolg getestet, aber kann nicht scheinen, um dieses operati zu tun auf Serverseite. Irgendwelche Ideen?

+1

Welche Methode verwenden Sie ausgeben es? – Kazar

Antwort

47

Ihre Zeichenfolge ist auch UTF-8 codiert. Das wird funktionieren:

echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim")); 

Ausgabe: "Antônio Carlos Jobim".

+4

nur, wenn die Seite die ISO-8859-1-Kodierung deklariert. – Kornel

12

Tatsächlich erhalten Sie die gewünschte Ausgabe, aber es wird nicht als UTF-8 interpretiert. Wenn es sich um eine HTTP-Anwendung handelt, sollten Sie eine Kopfzeile oder ein Meta-Tag (oder beides) senden, die den Client anweisen, UTF-8 zu verwenden.

Edit: zum Beispiel:

// replace text/html with the content type you're using 
header('Content-Type: text/html; charset=UTF-8'); 
1

Sind Sie auch htmlenteties verwenden, bevor es auf die Seite Echo? Als ich gerade Ihren Code getestet habe, funktionierte er gut mit dem urldecode("Ant%C3%B4nio+Carlos+Jobim"); Teil, aber als ich ihn durch htmlentities lief, bekam ich die gleiche Ausgabe wie Sie.

Es scheint ein Problem mit den UTF-8-Zeichen und wie PHP behandelt die htmlentities-Funktion.

+1

Es funktioniert ordnungsgemäß, wenn Sie die richtige Codierung als den $ charset-Parameter angeben. Außerdem sollten Sie "htmlspecialchars" und nicht "htmlentities" verwenden, wenn Sie nur vor XSS schützen möchten. –

1

wenn ich

<?php 
echo urldecode("Ant%C3%B4nio+Carlos+Jobim"); 
?> 

Sein Display korrekt in meinem Browser wie

Antônio Carlos Jobim

ich mit XAMPP getestet

0

eine weitere Option:

<?php 
$smthing = 'http%3A%2F%2Fmysite.com'; 
$smthing = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($smthing)); 
$smthing = html_entity_decode($smthing,null,'UTF-8'); 
echo $smthing; 
?> 

Ausgang wird: http://mysite.com