我正在尝试在 PHP 5.3 中解析推文中的文本,但在解析包含 Unicode 字符的用户提及、主题标签和链接时遇到问题。
首先,我获取推文并将其存储到 txt 文件中:
$tweets_file = createFile('cache/'.$twitteruser.'-tweets.txt', json_encode($tweets));
之后,在我的文本文件中,我可以看到一堆 Unicode 字符(例如Landsli\u00f0sma\u00f0ur
)。
当我尝试显示所有推文时,我会这样做:
function twitterify($text) {
$text = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#u", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $text);
$text = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#u", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $text);
$text = preg_replace("/@(\w+)/u", "<a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>", $text);
$text = preg_replace("/#(\w+)/u", "<a href=\"http://search.twitter.com/search?q=\\1\" target=\"_blank\">#\\1</a>", $text);
return $text;
}
$tweets_file = file_get_contents('cache/'.$queried_user.'-tweets.txt');
$tweets = json_decode($tweets_file);
foreach($tweets as $tweet) {
echo twitterify($tweet->text);
// do other stuff...
}
例如,在主题标签中有 Unicode 字符之前,这里一切正常。我preg_replace
停在那个字符和一个像#rafhlaða
渲染到的主题标签上<a href="#">#rafhla</a>ða
。
我该怎么做才能正确渲染出带有 Unicode 字符的文本?