2013-03-23 2 views
1

У меня есть следующая история: «« Еще один канал поделился некоммерческими организациями на фотографии Facebook. », и я хочу заменить его теги ссылками.PHP facebook как заменить story_tags на сюжетную линию?

история данных facebook апи и 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

Посмотри здесь на мою реализации:

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 к старому смещению.

Voila! ;)

Смежные вопросы