Reputation: 775
I am trying to decode this URL string using PHP's urldecode function:
urldecode("Ant%C3%B4nio+Carlos+Jobim");
This is supposed to output...
'Antônio Carlos Jobim'
...but instead is ouptutting this
'Antônio Carlos Jobim'
I've tested the string in a JS-based online decoder with great success, but can't seem to do this operation server side. Any ideas?
Upvotes: 36
Views: 104687
Reputation: 56547
another option is:
<?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;
?>
output becomes : http://mysite.com
Upvotes: 3
Reputation: 3409
Actually, you get the desired output, but it is not interpreted as UTF-8. If this is on an HTTP application, you should send a header or a meta tag (or both) which would tell the client to use UTF-8.
Edit: for example:
// replace text/html with the content type you're using
header('Content-Type: text/html; charset=UTF-8');
Upvotes: 14
Reputation: 123889
when I do
<?php
echo urldecode("Ant%C3%B4nio+Carlos+Jobim");
?>
Its display correctly in my browser like
Antônio Carlos Jobim
I have tested with XAMPP
Upvotes: 3
Reputation: 4114
Your string is also UTF-8 encoded. This will work:
echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim"));
Output: "Antônio Carlos Jobim".
Upvotes: 70
Reputation: 66211
Are you also using htmlenteties
before echoing it to the page? When I just tested your code it worked fine with just the urldecode("Ant%C3%B4nio+Carlos+Jobim");
part, but when I ran it through htmlentities
I got the same output as you did.
It seems to be a problem with the UTF-8 characters and how PHP handles the htmlentities
function.
Upvotes: 1