0

我写了一个 php 站点(它仍然是一个原型),并在上面放置了一个 Digg 按钮。这很容易,但是...

官方手册说:“必须对 URL 进行编码”。我用 urlencode() 做到了这一点。在 urlencode 之后,我的 URL 如下所示:

http%3A%2F%2Fwww.mysite.com%2Fen%2Fredirect.php%3Fl%3Dhttp%3A%2F%2Fwww.othersite.rs%2FNews%2FWorld%2F227040%2FRusia-Airplane-crashed%26N%3DRusia%3A+Airplane+crashed

到目前为止还不错,但是当我想将该 URL 提交给 Digg 时,它被识别为无效 URL:

http://www.mysite.com/en/redirect.php?l=http://www.othersite.rs/News/World/227040/Rusia-Airplane-crashed&N=Rusia:+Airplane crashed

如果我在“Airplane”和“crashed”(在链接末尾)之间放置一个“+”,那么 Digg 可以毫无问题地识别它!

请帮忙,这个奇怪的问题正在杀死我的脑细胞!

PS出于此答案的目的,网址已更改(更改为不存在的网址),因为在原始网站中涉及非英语网站。

4

1 回答 1

0

编辑后urlencode(),还要对生成的加号进行编码:

$encoded_url = urlencode($original_url);
$final_url = str_replace('+', '%2B', $encoded_url);

或者,您可以+先替换 URL 中的空格,然后再替换urlencode()结果:

$spaceless_url = str_replace(' ', '+', $original_url);
$final_url = urlencode($spaceless_url);

如果您自己的站点首先需要对查询字符串中的参数进行编码,那么您就不会有问题(因为原始 URL 中不会有未编码的空间)。

于 2011-01-01T14:39:36.037 回答