我真的很难理解 Twitter 如何期望其 API 的用户将其发送的纯文本推文转换为正确链接的 HTML。
这是交易:当您请求推文的详细数据时,Twitter 的 JSON API 会将这组信息发回:
{
"created_at":"Wed Jul 18 01:03:31 +0000 2012",
"id":225395341250412544,
"id_str":"225395341250412544",
"text":"This is a test tweet. #boring @nbc http://t.co/LUfDreY6 #skronk @crux http://t.co/VpuMlaDs @twitter",
"source":"web",
"truncated":false,
"in_reply_to_status_id":null,
"in_reply_to_status_id_str":null,
"in_reply_to_user_id":null,
"in_reply_to_user_id_str":null,
"in_reply_to_screen_name":null,
"user": <REDACTED>,
"geo":null,
"coordinates":null,
"place":null,
"contributors":null,
"retweet_count":0,
"entities":{
"hashtags":[
{
"text":"boring",
"indices":[22,29]
},
{
"text":"skronk",
"indices":[56,63]
}
],
"urls":[
{
"url":"http://t.co/LUfDreY6",
"expanded_url":"http://www.twitter.com",
"display_url":"twitter.com",
"indices":[35,55]
},
{
"url":"http://t.co/VpuMlaDs",
"expanded_url":"http://www.example.com",
"display_url":"example.com",
"indices":[70,90]
}
],
"user_mentions":[
{
"screen_name":"nbc",
"name":"NBC",
"id":26585095,
"id_str":"26585095",
"indices":[30,34]
},
{
"screen_name":"crux",
"name":"Z. D. Smith",
"id":407213,
"id_str":"407213",
"indices":[64,69]
},
{
"screen_name":"twitter",
"name":"Twitter",
"id":783214,
"id_str":"783214",
"indices":[91,99]
}
]
},
"favorited":false,
"retweeted":false,
"possibly_sensitive":false
}
对于这个问题,有趣的部分是 、 和 数组中的元素和条目text
。Twitter告诉我们hastags,提及和url与数组一起出现在元素中的哪个位置......所以这里是问题的症结所在:hashtags
user_mentions
urls
text
indices
你如何使用这些indices
数组?
您不能通过使用类似的内容循环每个链接元素来直接使用它们substr_replace
,因为替换中的第一个链接元素text
将使后续链接元素的所有索引值无效。您也不能使用substr_replace
' 数组功能,因为它仅在您为第一个 arg 提供一个字符串数组而不是单个字符串时才有效(我已经对此进行了测试。结果......很奇怪)。
是否有一些函数可以同时用不同的替换字符串替换单个字符串中的多个索引分隔的子字符串?