2011-09-22 54 views
2

我想用@username像Twitter一樣實現用戶提及。但是,在我的應用程序中,用戶名可能會改變。我的方法是在保存到數據庫之前解析帖子並將所有@username轉換爲@userId。你覺得這怎麼樣?有沒有人有更好的選擇?如何存儲用戶提及

回答

4

按原樣保存原始文本,並使用uid和用戶名創建相關記錄表。

示例模式:

後[表]

id 
text 

user_mention [表]

id 
post_id 
user_id_mentioned 
user_name_mentioned 

當後保存,你的代碼應該通過創造所有user_mention記錄。您可以通過提及表循環發送電子郵件或其他任何您想要做的事情。

如果用戶更改其用戶名,則您現在有選項用新用戶名更新帖子,或者將舊用戶名鏈接指向正確的用戶。

我的法則是永遠,永遠改變原來非結構化文本保存到數據庫之前(但合理性檢查,以避免注射和諸如此類的東西),並修改數據只輸出。這意味着你總是有用戶輸入的數據,你永遠不知道什麼時候會有價值。

也許有一天,你有興趣在被提及n次後更改了用戶名?或者其他一些你無法得到的報告,因爲你修改了非結構化數據。你永遠不知道什麼時候你會想要原始數據,在這種情況下,你會得到額外的好處,讓你的文本更容易處理。

0

是的,我認爲在發佈時間檢查用戶名列表,並將它們內部轉換爲用戶ID是有道理的。然後,無論何時顯示帖子,都將用戶標識翻譯回當前用戶名。

注意,這將是對非動態內容更加困難,如發送電子郵件等

另外,我會確保用戶名顯示在的方式,清楚地表明他們」不要說OP張貼的話,否則,這將給用戶將文本注入其他人的帖子的方式。

+0

謝謝您的回覆。我在顯示之前將userId轉換回當前用戶名。唯一的問題是我發送電子郵件給成功放入數據庫後提到的用戶。文本然後包含ID而不是用戶名。 你也可以請你詳細說明你的第三段。我不太明白。感謝您的時間和迴應。 – nezgerland

+0

另外,爲了提取提到從文章中,我使用下面的正則表達式: 「/ @(\ w +)/是」 我已經看到了很多複雜的正則表達式這purporse。但我認爲這就夠了。你有什麼意見? – nezgerland

+1

我認爲'/ @(\ w +)/'比較樂觀 - 比如'user @ example.com'。 – zigdon

0

是的我認爲這很好。 Twitter本身並不僅僅使用Usernames它使用UserIDs

它獲取高音單元的用戶ID,然後查找它以獲取實際的用戶名。

文檔:MentionsLookup

每個用戶應該有一個唯一的ID。在發送給用戶的任何地方之前,您應該將用戶名和用戶名匹配。