URL Decoding in PHP

冷暖自知 提交于 2019-11-26 03:58:59

问题


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?


回答1:


Your string is also UTF-8 encoded. This will work:

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

Output: "Antônio Carlos Jobim".




回答2:


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');



回答3:


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




回答4:


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.




回答5:


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




回答6:


first you have to decode in urldecoder function "urldecoder()" and then use utf decoder function "utf_decoder()"



来源:https://stackoverflow.com/questions/1756862/url-decoding-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!