36

我正在尝试使用 PHP 的 urldecode 函数解码此 URL 字符串:

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

这应该是输出...

'Antônio Carlos Jobim'

...而是输出这个

'Antônio Carlos Jobim'

我已经在基于JS的在线解码器中测试了字符串并取得了巨大成功,但似乎无法在服务器端进行此操作。有任何想法吗?

4

6 回答 6

70

您的字符串也是UTF-8 编码的。这将起作用:

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

输出:“安东尼奥·卡洛斯·乔宾”。

于 2009-11-18T15:47:38.023 回答
14

实际上,您会得到所需的输出,但它不会被解释为 UTF-8。如果这是在 HTTP 应用程序上,您应该发送一个标头或元标记(或两者),告诉客户端使用 UTF-8。

编辑:例如:

// replace text/html with the content type you're using
header('Content-Type: text/html; charset=UTF-8');
于 2009-11-18T15:45:18.207 回答
3

当我做

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

它在我的浏览器中正确显示

安东尼奥·卡洛斯·若宾

我已经用 XAMPP 测试过

于 2009-11-18T15:47:49.483 回答
3

另一种选择是:

<?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;
?>

输出变为:http://mysite.com

于 2013-03-26T13:42:22.647 回答
1

您是否也在将htmlenteties其回显到页面之前使用?当我刚刚测试你的代码时,它只对urldecode("Ant%C3%B4nio+Carlos+Jobim");部分工作正常,但是当我运行它时,htmlentities我得到了和你一样的输出。

htmlentitiesUTF-8 字符以及 PHP 处理函数的方式似乎存在问题。

于 2009-11-18T15:45:48.377 回答
-1

首先你必须在 urldecoder 函数“urldecoder()”中解码,然后使用 utf 解码器函数“utf_decoder()”

于 2019-01-03T09:33:11.503 回答