【问题标题】:Digg button rejects encoded urlDigg 按钮拒绝编码的 url
【发布时间】:2011-01-01 14:28:28
【问题描述】:

我写了一个 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 可以毫无问题地识别它!

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

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

【问题讨论】:

    标签: php url button encode digg


    【解决方案1】:

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

    $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 中不会有未编码的空间)。

    【讨论】:

    • 这行不通!有趣的是,如果我“死($link)”它看起来不错,(+ 而不是“”)。但是,在 digg 页面上,它只被解释为 + 而不是第一个“”!看看“&N=Rusia:+Airplane crashed”部分。如果我在 url 中省略“N”参数,它工作正常,但我必须有那个“N”!
    • 它必须是%2B - 而不是+,而不是空格。
    • 天啊!我得到了它!如果我从“N”参数中删除非英语字符,那没关系!有没有办法用非英文拉丁字符正确“urlencode”文本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多