我的移动应用程序就像一个移动平台(WP7、Silverlight、.NET)上的论坛。一项功能是通过编写“@”字符后跟用户名来标记其他用户。
在服务器端,PHP,我正在解析文本,以便它匹配标签并将它们替换为更易读的字符串,例如[tag](display name)|(user id)[/tag]
,但这对于我们的目的并不重要。
为了匹配标签,我将所有特殊字符替换为空格,这样我就可以防止这种情况发生.... @name, ....
。然后,我将删除上一个命令可能已创建的所有多个空格。最后,我将每个空格分开,然后检查该单词是否以“@”字符开头。这当然不是最好的方法,但这是我迄今为止所做的。有一个弱点,新行字符使我的代码失败。例如:
Hello, this is my first line
since I go to second and then I tag
@Jonh
who is a good boy
在这种情况下,我将在下面编写的代码将失败。$resp
要解析的文本在哪里。
if (strpos($resp,'@') !== false) {
$new_str = preg_replace('/[^a-zA-Z0-9_ \@]/', ' ', $resp);
$new_str = preg_replace('/\s+/', ' ', $new_str);
foreach(explode(' ', $new_str) as $word)
{
if (strpos($word, '@') === 0) {
//found my tag!
}
}
}
}
你会建议做什么?