PHP facebook如何用故事情节替换story_tags?

时间:2013-03-23 06:41:48

标签: php facebook facebook-graph-api replace

我有以下故事“另一个Feed在Facebook的照片上共享非营利。”,我想用链接替换其标签。

facebook api数据故事和story_tags

                    [story] => Another Feed shared Non-Profits on Facebook's photo.
                    [story_tags] => Array
                        (
                            [0] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 1.7153566624E+14
                                            [name] => Another Feed
                                            [offset] => 0
                                            [length] => 12
                                            [type] => page
                                        )

                                )

                            [20] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 41130665917
                                            [name] => Non-Profits on Facebook
                                            [offset] => 20
                                            [length] => 23
                                            [type] => page
                                        )

                                )

                        )

如果我用str_ireplace替换故事标签,那么两个不同的标签有可能具有相同的名称,因此它不会很好。

如果我用substr_replace(...)替换它,那么在替换故事的长度后会得到更多,那么新标签就不能与它一起很好地工作。

用故事情节替换故事标签的最佳方法是什么?我确定人们已经做到了,但无法找到它。

1 个答案:

答案 0 :(得分:1)

看看我的实施:

  public function mapMentions($message, $tags) {
    if (empty($tags)) {
      return $message;
    }

    $offsetBuffer = 0;

    foreach (json_decode($tags, true) as $tag) {
      $link = $this->Html->link($tag['name'], $tag['link'], ['target' => '_blank']);
      $message = substr_replace($message, $link, $tag['offset'] + $offsetBuffer, $tag['length']);
      $offsetBuffer += (strlen($link) - $tag['length']);
    }

    return $message;
  }
  1. 首先,您需要生成链接的长度(graph.facebook.com/ID)
  2. 现在,您需要将旧长度和新链接长度之间的差异保存到临时变量(在我的情况下为“offsetBuffer”)。
  3. 在循环中将offsetBuffer附加到旧偏移量。
  4. 瞧! ;)