我正在尝试使用 PHP 的 urldecode 函数解码此 URL 字符串:
urldecode("Ant%C3%B4nio+Carlos+Jobim");
这应该是输出...
'Antônio Carlos Jobim'
...而是输出这个
'Antônio Carlos Jobim'
我已经在基于JS的在线解码器中测试了字符串并取得了巨大成功,但似乎无法在服务器端进行此操作。有任何想法吗?
您的字符串也是UTF-8 编码的。这将起作用:
echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim"));
输出:“安东尼奥·卡洛斯·乔宾”。
实际上,您会得到所需的输出,但它不会被解释为 UTF-8。如果这是在 HTTP 应用程序上,您应该发送一个标头或元标记(或两者),告诉客户端使用 UTF-8。
编辑:例如:
// replace text/html with the content type you're using
header('Content-Type: text/html; charset=UTF-8');
当我做
<?php
echo urldecode("Ant%C3%B4nio+Carlos+Jobim");
?>
它在我的浏览器中正确显示
安东尼奥·卡洛斯·若宾
我已经用 XAMPP 测试过
另一种选择是:
<?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
您是否也在将htmlenteties
其回显到页面之前使用?当我刚刚测试你的代码时,它只对urldecode("Ant%C3%B4nio+Carlos+Jobim");
部分工作正常,但是当我运行它时,htmlentities
我得到了和你一样的输出。
htmlentities
UTF-8 字符以及 PHP 处理函数的方式似乎存在问题。
首先你必须在 urldecoder 函数“urldecoder()”中解码,然后使用 utf 解码器函数“utf_decoder()”