如何正确编码URL


How to correctly encode URL?

我想像浏览器那样编码,

例如

https://www.google.com.hk/search?q=%2520你好

应编码为https://www.google.com.hk/search?q=%2520%E4%BD%A0%E5%A5%BD

我使用以下正则表达式来编码URI,而不像rawurlencode编码~!@#$&*()=:/,;?+'

$url = 'https://www.google.com.hk/search?q=%2520你好';
echo preg_replace_callback("{[^0-9a-z_.!~*'();,/?:@&=+$#]}i", function ($m) {
    return sprintf('%%%02X', ord($m[0]));
}, $url);

但是这将返回https://www.google.com.hk/search?q=%252520%E4%BD%A0%E5%A5%BD,它有一个额外的25

如何在不修改原始地址的情况下正确编码用户输入的URL ?

您可以简单地使用urlencode来实现此目的。它将%2520你好编码为%252520%E4%BD%A0%E5%A5%BD。使用下面的代码:

<?php
$url = 'https://www.google.com.hk/search?q=%2520'.urlencode("你好").'';
echo $url;
?>

我想这会给你想要的url