我正在尝试弄清楚如何在状态/更新期间发布special commands。 API documentation统计信息,如果发布推文用“D”表示,“M”将在命令后向用户发送直接消息。
我尝试用“不间断空格”(%A0)替换第一个字符。然而,twitter将这些字符翻译为 。
我能想到的唯一另一个选择是创建一个正则表达式,它可以删除所有潜在危险的SMS代码。这并不理想,因为我更喜欢保留原始推文。比如推特:“D Day是一部不错的电影。”会导致“Day是一部不错的电影。”
我也试过在帖子前输入一个空格,但它被忽略了,仍然发送了直接信息。是否有某种逃避角色或作弊使得Twitter忽略这些命令?
答案 0 :(得分:1)
看起来我找到了解决方案。有一些问题。第一个是我的百分比编码功能是不接受unicode字符所以twitter正在响应 。为了解决这个问题,我在VB.Net中使用了以下代码:
Regex.Replace(Uri.EscapeDataString(s), "[\!\*\'\(\)]", Function(m) Uri.HexEscape(Convert.ToChar(m.Value(0).ToString())))
第二个问题是twitter将所有空格字符视为相同。因此,您不能欺骗和使用诸如u + 00A0(不间断空格)或下列任何其他字符的字符:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf(6.4) http://en.wikipedia.org/wiki/Whitespace_character
幸运的是,twitter不包含zero-width spaces作为空格字符。如果使用零宽度空间,twitter实际上允许通过API发布141个字符。这意味着您可以在SMS命令之后和空格之前添加U + 200B以防止SMS命令运行。如:
Dim s as String = "M" & ChrW(8203) & " Username 140 character tweet posted here as a test. This is actually 141 characters because of the zero-width space. But accepted anyway."
希望这有帮助!
更新
对于那些正在寻找正则表达式代码来执行此操作的人来说,这是一个1班轮:
Regex.Replace(s, "^(ON|OFF|FOLLOW|F|UNFOLLOW|LEAVE|L|STOP|QUIT|END|CANCEL|UNSBSCRIBE|ARRET|D|M|RETWEET|RT|SET|WHOIS|W|GET|G|FAV|FAVE|FAVORITE|FAVORITE|\*|STATS|SUGGEST|SUG|S|WTF|HELP|INFO|AIDE|BLOCK|BLK|REPORT|REP)( )", Function(m) m.ToString.Replace(" ", ChrW(8203) & " "))