Я очень зациклен на том, как 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
и записи в массивах hashtags
, user_mentions
и urls
. Twitter сообщает нам, где в элементе text
появляются гастаги, упоминания и URL-адреса с массивами indices
... так вот суть вопроса:
Как вы используете те indices
массивы?
Вы не можете просто использовать их прямо, перебирая каждый элемент ссылки с чем-то вроде substr_replace
, так как замена первого элемента ссылки в text
приведет к аннулированию всех значений индекса для последующих элементов ссылки. Вы также не можете использовать substr_replace
массив, поскольку он работает только тогда, когда вы даете ему массив строк для первого arg, а не одну строку (I 've проверил это. Результаты... странные).
Есть ли какая-нибудь функция, которая может одновременно заменить несколько подстрочных индексированных подстрок в одной строке с разными строками замены?