3

我想用@username 实现用户提及,就像在 Twitter 中一样。但是,在我的应用程序中,用户名可能会改变。我的方法是在保存到数据库之前解析帖子并将所有@username 转换为@userId。你觉得这怎么样?有没有人有更好的选择?

4

3 回答 3

8

按原样存储原始文本,并使用 uid 和用户名创建相关记录表。

示例架构:

发布 [表格]

id
text

user_mention [表]

id
post_id
user_id_mentioned
user_name_mentioned

保存帖子后,您的代码应该通过并创建所有 user_mention 记录。您可以遍历提及表以发送电子邮件或您想做的任何其他事情。

如果用户更改了他们的用户名,您现在可以选择使用新用户名更新帖子,或者将旧用户名链接到正确的用户。

我的规则是在保存到数据库之前永远不要修改原始的非结构化文本(但要对其进行完整性检查以避免注入等),并且在输出时修改数据。这意味着您始终让用户输入数据,而您永远不知道何时会变得有价值。

也许有一天,您对谁在被提及 n 次后更改了用户名感兴趣?或者由于您修改了非结构化数据而无法获得的其他报告。您永远不知道何时需要原始数据,在这种情况下,您会获得额外的好处,即让您的文本更易于使用。

于 2011-09-22T19:33:12.190 回答
0

是的,我认为在发布时检查用户名列表,并在内部将它们转换为用户 ID 是有意义的。然后,每当您显示帖子时,将用户 ID 转换回当前用户名。

请注意,这对于非动态内容(例如发送的电子邮件等)会更加困难。

另外,我会确保用户名的显示方式清楚地表明它们不是 OP 发布的单词,否则,这将为用户提供一种将文本注入其他人的帖子的方式。

于 2011-09-22T19:15:45.550 回答
0

是的,我认为这很好。Twitter 本身不仅使用Usernames它还使用UserIDs.

它获取 tweeter 用户 ID,然后查找它以获取实际用户名。

文档:提及查找

每个用户都应该有一个唯一的 ID。在将 ID 发送到任何对用户可见的地方之前,您应该将 ID 与用户名匹配。

于 2011-09-22T19:33:41.480 回答