老师我要提问:关于输入意愿与表情解析机制的冲突问题。
来源:12-7 表情解析并显示的解决方案-1

weixin_慕尼黑8068974
2020-07-06
老师,spannable是根据发来消息进行匹配,当遇到匹配的字符就显示对应的表情。
但是如果我就是要输入[ft001]这个东西怎么办呢?我不想显示表情,我传答的就是这些字符,这要怎么解决呢?
写回答
1回答
-
有两种办法:
将自己想要发送的数据[ft001]进行二次转码,比如转变为:\[ft001\],而表情则不进行转码,然后我们收到消息就会类似于:\[ft001\][ft001]前面代表我们的意愿,后面代表我们的表情,此时先解析表情,那么第一个自然不会被匹配为表情,解析表情后,在转码将\消除,得到原始的展示字符。这种方案非常常见,比如数据库存储的字段一般会进行一次特殊字符转码避免数据库注入,还有js操作文本的时候也有类似的转码方案。但这种其实比较低效率。
第二种就是是加大表情的匹配难度,比如我们将表情的匹配弄的复杂一些:[&[[ft001]&],这个才代表第一个表情。OK这种方案就是增加表情的解析和匹配复杂度,使用用户不太可能输入的文字来作文章,这种方案是目前大家采取的方案。当然你说万一用户就是想要输入[&[[ft001]&]呢,这没办法呀,用户输入这个我就给他变成表情呗。这种的缺陷就是用户永远也无法看见[&[[ft001]&]这样的字符串了,但是因为本身比较复杂,而且没啥其他含义,谁没事儿聊天专门发这个呢。
022020-07-15
相似问题