PHP facebook如何用故事线替换故事标签?

PHP facebook如何用故事线替换故事标签?,php,facebook,facebook-graph-api,replace,Php,Facebook,Facebook Graph Api,Replace,我有以下故事“另一个Feed在Facebook的照片上分享了非盈利内容。”,我想用链接替换它的标签 facebook api数据故事和故事标签 [story] => Another Feed shared Non-Profits on Facebook's photo. [story_tags] => Array (

我有以下故事“另一个Feed在Facebook的照片上分享了非盈利内容。”,我想用链接替换它的标签

facebook api数据故事和故事标签

                    [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替换story标签,那么两个不同的标签可能有相同的名称,因此它不会很好地发挥作用

如果我用substr_replace(…)替换它,那么在替换之后,故事的长度会比原来更长,所以新的标记不能很好地与它一起工作


用故事线替换故事标签的最佳方法是什么?我确信人们已经做了,但找不到。

请看一下我的实现:

  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;
  }
  • 首先,需要生成链接的长度(graph.facebook.com/ID)
  • 现在,您需要将旧长度和新链接长度之间的差异保存到一个临时变量(在我的例子中是“offsetBuffer”)
  • 在循环中,将offsetBuffer附加到旧的偏移量

  • 看看我的实现:

      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;
      }
    
  • 首先,需要生成链接的长度(graph.facebook.com/ID)
  • 现在,您需要将旧长度和新链接长度之间的差异保存到一个临时变量(在我的例子中是“offsetBuffer”)
  • 在循环中,将offsetBuffer附加到旧的偏移量