parse_url 用 space 替换加号
parse_url replacing the plus sign with a space
$url = parse_url('https://plus.google.com/+erikedgren');
$address = ltrim(rtrim($url['path'], '/'), '/');
echo $address;
$address
输出 plus.google.com/ erikedgren
。为什么?我该如何解决这个问题?
编辑
上面的代码输出 +erikedgren
。但是当我用 $_GET['u']
替换 $url
中的地址时(从 parse_url(https://plu...)
到 parse_url($_GET['u'])
),我得到 plus.google.com/ erikedgren
。让我解释一下我的系统是如何工作的。
当我在本地服务器上点击我网站上的 link 时(我还没有发布更新),外部地址的 URL 看起来像这样: http://192.168.1.135/erik-edgren/url/https://plus.google.com/+erikedgren
.
外部地址的最后一部分是 $_GET['u']
正在获取的内容。下面是 RewriteRule 的样子:RewriteRule ^url/(.*)$ get-url.php?u=$ 1
($ 和 1 之间没有空格)。
URL 编码 https://plus.google.com/+erikedgren
,然后将其包含在 URL 的末尾。 + 是 space 如果它不是 url 编码。
根据您更新的问题,这似乎对我有用:
$url = parse_url($_GET['u']);
$address = trim(rawurldecode(urlencode($url['path'])), '/');
echo $address;
我还替换了 ltrim
和 rtrim
,因为 trim
将从开头和结尾删除。
$url = parse_url('https://plus.google.com/+erikedgren');
$address = ltrim(rtrim($url['path'], '/'), '/');
echo $address;
$address
输出 plus.google.com/ erikedgren
。为什么?我该如何解决这个问题?
编辑
上面的代码输出 +erikedgren
。但是当我用 $_GET['u']
替换 $url
中的地址时(从 parse_url(https://plu...)
到 parse_url($_GET['u'])
),我得到 plus.google.com/ erikedgren
。让我解释一下我的系统是如何工作的。
当我在本地服务器上点击我网站上的 link 时(我还没有发布更新),外部地址的 URL 看起来像这样: http://192.168.1.135/erik-edgren/url/https://plus.google.com/+erikedgren
.
外部地址的最后一部分是 $_GET['u']
正在获取的内容。下面是 RewriteRule 的样子:RewriteRule ^url/(.*)$ get-url.php?u=$ 1
($ 和 1 之间没有空格)。
URL 编码 https://plus.google.com/+erikedgren
,然后将其包含在 URL 的末尾。 + 是 space 如果它不是 url 编码。
根据您更新的问题,这似乎对我有用:
$url = parse_url($_GET['u']);
$address = trim(rawurldecode(urlencode($url['path'])), '/');
echo $address;
我还替换了 ltrim
和 rtrim
,因为 trim
将从开头和结尾删除。