string.replace奇怪的行为

时间:2014-12-08 10:32:21

标签: javascript twitter

我有一个应用程序可以让YouTube视频ID通过Twitter分享。看看这些推文,我可以看到用户正在分享它们,但在某些情况下,共享内容会被破坏。

我们有一个用id响应的restful API,然后使用字符串替换方法替换{{id}}。

http://twitter.com/intent/tweet?text=http://www.youtube.com/watch?v={{id}} Share your video to win.

替换方法

var href = $('#twitter-btn').attr('href');

$('#twitter-btn').attr('href', href.replace('{{id}}', response.youtube_id) );

在大多数情况下,推文都可以这样看......

http://www.youtube.com/watch?v=0bxW5fd Share your video to win.

但在某些情况下,我们看到......

http://www.youtube.com/watch?v

我觉得很奇怪的是' ='已被删除。我们排除了服务器给出错误的响应,因为我们记录所有ID以检查它们是否有效。

是否有人知道这种情况会如何发生,或者某些ID会突破推特,因为我知道'#'符号需要被url编码为%23,否则会中断。

共享功能使用标准的Twitter共享。

<script type="text/javascript" async src="//platform.twitter.com/widgets.js"></script>

这真的让我很难过,因为这是一项基本的任务,我无法理解这是怎么发生的。

任何想法都将非常感激。

2 个答案:

答案 0 :(得分:1)

replace isn't broken。如果href字符串确实包含

http://twitter.com/intent/tweet?text=http://www.youtube.com/watch?v={{id}} Share your video to win

...然后,您显示的replace {{id}}替换为response.youtube_id的值。

鉴于=没有显示在结果中,我看到的唯一可能性是:

  1. href首先没有={{id}}。也许有些事情是在你抓住之前修改属性。

  2. 您不是直接查看replace的结果,而是直接查看派生的的结果,并且在推导的过程中=并且删除后的值,可能只有当=最初后跟一些无效的东西(可能是空白)时 - 在这种情况下,问题将出现在response.youtube_id

    < / LI>

    但是不要专注于replace,这不是问题。

答案 1 :(得分:0)

http://www.dummies.com/how-to/content/how-to-insert-links-into-tweets.html

或使用http编码查询字符串参数text=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D%7B%7Byourid%7D%7D

$('#twitter-btn').attr('href', href.replace('yourid', response.youtube_id) );

这应该是它。