我从Facebook api获得这个帖子对象:
{
"id"=>"XXX",
...,
"message"=>"abcd efg hijkl mn The New York Times opqr",
"message_tags"=>{
"18"=>[{
"id"=>"5281959998",
"name"=>"The New York Times",
"type"=>"page",
"offset"=>18,
"length"=>18
}]
},
...
}
如何使用offset和amp;在rails中创建链接到facebook页面长度属性?结果将是这样的:
abcd efg hijkl mn <a href="www.facebook.com/5281959998">The New York Times</a> opqr
答案 0 :(得分:0)
我现在必须这样做,但是在PHP中。这是我的解决方案:
/**
* Get message HTML
*
* @param string $text The message text
* @param array $tags The tags array
* @return string HTML message string with linked tags
*/
public static function getMessageHtml($text, $tags) {
$doc = new DOMDocument;
$doc->appendChild($doc->createTextNode($text));
if (is_array($tags)) {
foreach ($tags as $tag) {
$tag = $tag[0];
$start = 0;
foreach ($doc->childNodes as $child) {
if ($tag['offset'] < $start + strlen($child->nodeValue)) {
$meat = $child->splitText($tag['offset'] - $start);
$tail = $meat->splitText($tag['length']);
$a = $doc->createElement('a');
$a->setAttribute('href', '//facebook.com/' . $tag['id']);
$a->setAttribute('title', $tag['name']);
$meat->parentNode->replaceChild($a, $meat);
$a->appendChild($meat);
break;
}
$start += strlen($child->nodeValue);
}
}
}
return trim($doc->saveHTML());
}
到目前为止,这在我的所有测试用例中都有效,但如果标签重叠或嵌套,它可能会很狡猾。我不确定Facebook是否会返回这样的标签。
希望您可以轻松将其移植到Ruby。