模仿中文字符的浏览器URL编码?

时间:2018-02-09 10:17:08

标签: php http url utf-8 url-encoding

如果你去这里:http://hdjob.bjx.com.cn/AdvanceSearch.shtml

在源HTML中找到:

<dd><a href="/SearchResult.aspx?workprovince=安徽" target="_blank">安徽</a></dd>

如果您将光标放在Chrome或Firefox中的链接上,或者只是将其打开,则网址如下所示:

http://hdjob.bjx.com.cn/SearchResult.aspx?workprovince=%B0%B2%BB%D5

因此,浏览器会自动将中文字符安徽编码为%B0%B2%BB%D5

我的问题是如何在PHP中模仿这个?

我试过这些:

echo urlencode("安徽"), PHP_EOL;
echo rawurlencode("安徽");

哪个输出:

%E5%AE%89%E5%BE%BD
%E5%AE%89%E5%BE%BD

但是如果你去:

http://hdjob.bjx.com.cn/SearchResult.aspx?workprovince=%E5%AE%89%E5%BE%BD

它只是错误的页面而且workprovince变量根本没有正确解码。

似乎Chrome和Firefox都以不同于 urlencode ()和 rawurlencode ()的方式编码中文字符?

如何模仿他们在PHP中执行此操作的方式呢?

1 个答案:

答案 0 :(得分:1)

 echo urlencode(mb_convert_encoding('安徽', 'gb2312', 'utf-8')); //  %B0%B2%BB%D5
 echo urlencode('安徽'); // %E5%AE%89%E5%BE%BD