【问题标题】:Twitter URL encodingTwitter URL 编码
【发布时间】:2010-12-26 13:42:32
【问题描述】:

我们即将推出一个小小的 twitter 圣诞节比赛,但我遇到了一个小障碍。

要进入,人们需要按以下格式发布推文:

@user blah, blah, blah #hashtag

目前,我有一个表单,他们可以在其中输入他们的答案(等等等等)和一个 PHP 脚本,该脚本对整个语句进行编码并添加到 twitter url:

http://www.twitter.com/home?status=%40user%20blah%2Cblah%2Cblah%20%23hashtag

然后将用户带到 twitter 并将状态放在更新字段中。

然而,虽然空格 (%20) 被正确解码,但 @ 和 # 字符分别保留为 %40 和 %23,即使在发布推文时也是如此。我无法将实际字符放在 url 中,因为 twitter 将其误认为是搜索。

有没有办法解决这个问题?如果可能的话,我想这样做而不需要用户名和密码等。

任何帮助将不胜感激。

【问题讨论】:

  • Rich,您能详细说明一下“然后将用户带到推特”部分吗?你只是在处理他们的文本后从 PHP 进行重定向吗?

标签: php url twitter


【解决方案1】:

我也遇到过同样的问题,解决方法很简单。

只需使用
http://twitter.com/home?status=
代替
http://www.twitter.com/home?status=
即使文本不是 ASCII 格式,它也会按预期工作。

如果您想了解有关此奇怪行为的更多详细信息,请参阅此博客文章: http://www.kilometer0.com/blog/2010/01/21/twitter-status-urls-and-ampersands/

希望这对某人有所帮助。

【讨论】:

  • 为此干杯 :) 我在上面选择的答案中也提到了这一点!
【解决方案2】:

将空格编码为 + 并且它可以工作: http://twitter.com/home?status=%40user+blah%2Cblah%2Cblah+%23hashtag

【讨论】:

  • 我还需要把 www 拿出来,然后它就奏效了!谢谢!
  • 取出 www 对我不起作用,但用 + 替换空格就像一个魅力
  • 对我不起作用。 Twitter 无法将 + 符号解码为空格。或者实际上它只解码第一个+,然后留下其余的。编写 Twitter 自定义 URL 解码的人需要以非常痛苦的方式被枪杀。
  • 实际上,twitter.com 不适合我,但 twitter.com/home 可以。显然 twitter 为您可以调用的每个可能的 URL 以不同的方式解码查询字符串。
  • 就像@mcv 所说,Twitter 没有正确解码“+”号。当然,您可以通过 - 好吧 - 不编码的方式在状态 url 中添加空格,这可能是个坏主意。
【解决方案3】:

您可以尝试直接在 Twitter 上发帖:

<form action="http://www.twitter.com/home" method="GET">
    <textarea name="status">

...

【讨论】:

  • 保持简单,嗯?没想到!但是,我希望对推文的结构有更多的控制权,而不是过多地依赖 JS。不过,谢谢,这可能是方式!
  • 我知道你的意思...我个人不介意依赖 JS(显然,只要它只在启用 JS 时才有效),因为 twitter.com 也想要 JS。
【解决方案4】:

嗯。至少在使用新的 Twitter 布局时......这是:

http://twitter.com/home?status=This+is+a+test+%26+So+is+this

... 重定向到此(登录时):

http://twitter.com/?status=This%20is%20a%20test%20&%20So%20is%20this

(注意未编码的 &)... 等待中的推文变为:

这是一个测试

:(

无数的调整和变化没有帮助。 (叹气。)

不可否认的粗略解决方法:将 & (%26) 更改为 + (%2B)。建议在(重新)将实体引入方程式之前使用纯文本执行此操作(例如,不要将 %26 更改为 %2B)。正如他们所说,测量两次,切割一次。

【讨论】:

    【解决方案5】:

    过了一会儿,我得到了这个...您必须以 UTF8 编码发送,您可以使用 javascript 来执行此操作,但我更喜欢 PHP,因为我的文本也来自 tatabase....

    <a href="http://twitter.com/share?text=<?= urlencode(utf8_encode( 'HERE I USE THE TITLE OF MY ARTICLE FROM DATABASE' )) ?>&lang=pt&url=<?= urlencode('http://jadielalves.com?s=stackoverflow') ;?>" target="_blank">SHARE ON TWITTER you can also put a twitter icon here... </a>

    【讨论】:

      【解决方案6】:

      我已经使用 MDN 中的这个函数完成了它

      为了更加严格地遵守 RFC 3986(保留 !、'、(、) 和 *),即使这些字符没有正式的 URI 分隔用途,也可以安全地使用以下字符:

      function fixedEncodeURIComponent(str) {
                  return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
                      return '%' + c.charCodeAt(0).toString(16);
                  });
              }
      

      source

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-26
        • 2016-04-29
        • 1970-01-01
        • 2011-04-03
        • 2021-08-04
        • 2011-08-19
        • 1970-01-01
        相关资源
        最近更新 更多