使用 php preg_replace 将链接包裹在推文中的链接上
您好,我正在尝试使用下面的代码显示最新的推文。这个 preg_replace 非常适合包装 twitter @usernames 的链接,但不适用于推文中的网址。如何获取此代码以将链接包装在推文中的网址周围。
<?php
/** Script to pull in the latest tweet */
$username='fairgroceruk';
$format = 'json';
$tweet = json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}"));
$latestTweet = htmlentities($tweet[0]->text, ENT_QUOTES);
$latestTweet = preg_replace('/@([a-z0-9_]+)/i', '<a href="http://twitter.com/$1" target="_blank">@$1</a>', $latestTweet);
$latestTweet = preg_replace('/http://([a-z0-9_]+)/i', '<a href="http://$1" target="_blank">http://$1</a>', $latestTweet); echo $latestTweet;
?>
谢谢你的帮助,
本
Hello I'm trying to display the latest tweet using the code below. This preg_replace works great for wrapping a link round twitter @usernames but doesn't work for web addresses in tweets. How do I get this code to wrap links around urls in tweets.
<?php
/** Script to pull in the latest tweet */
$username='fairgroceruk';
$format = 'json';
$tweet = json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}"));
$latestTweet = htmlentities($tweet[0]->text, ENT_QUOTES);
$latestTweet = preg_replace('/@([a-z0-9_]+)/i', '<a href="http://twitter.com/$1" target="_blank">@$1</a>', $latestTweet);
$latestTweet = preg_replace('/http://([a-z0-9_]+)/i', '<a href="http://$1" target="_blank">http://$1</a>', $latestTweet); echo $latestTweet;
?>
Thanks for the help,
Ben
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我添加了一个句点和一个转义的反斜杠,以便识别整个链接。对于上面的代码,它只是读取链接到点。只要链接和文本的其余部分之间有空格,这个正则表达式就应该有效。
I added a period and an escaped backslash so the whole link is recognized. With the code above, it was only reading the link up to the dot. As long as there is a space between your link and the rest of the text, this regex should work.
主要是因为正则表达式不是有效的 - 中间有一个 / 。
要么将分隔符更改为其他内容,如下所示,以阻止中间的 // 发生冲突:
请注意,您不必明确使用 ~,但它在正则表达式中的使用频率要低得多(至少根据我的经验) / 最终成为。
作为替代方案,您可以转义 // 部分:
Mostly because the regular expression isn't a valid one - there's a / in the middle of it.
Either change the delimiter to something else, like so, to stop the // in the middle colliding:
Note that you don't explicitly have to use ~, but it's far less commonly used in regular expressions (at least in my experience) than / ends up being.
As an alternative, you can escape the // part: