【发布时间】:2013-10-24 21:51:39
【问题描述】:
我有以下输入:
Hi! How are you? <script>//NOT EVIL!</script>
Wassup? :P
LOOOL!!! :D :D :D
然后通过表情库运行它变成这样:
Hi! How are you? <script>//NOT EVIL!</script>
Wassup? <img class="smiley" alt="" title="tongue, :P" src="ui/emoticons/15.gif">
LOOOL!!! <img class="smiley" alt="" title="big grin, :D" src="ui/emoticons/5.gif"> <img class="smiley" alt="" title="big grin, :P" src="ui/emoticons/5.gif"> <img class="smiley" alt="" title="big grin, :P" src="ui/emoticons/5.gif">
我有一个转义 HTML 实体以防止 XSS 的函数。因此,在第一行的原始输入上运行它会产生:
Hi! How are you? <script>//NOT EVIL!</script>
现在我需要转义所有输入,但同时我需要将表情符号保留在初始状态。所以当有&lt;:-P这个表情符号的时候,就一直这样,不会变成&lt;:-P。
我正在考虑对表情符号进行正则表达式拆分。然后单独处理每个部分,然后将字符串连接在一起,但我不确定 Regex 是否容易被绕过?我知道格式永远是这样的:
[<img class="smiley" alt="]
[empty string]
[" title="]
[one of the values from a big list]
[, ]
[another value from the list (may be matching original emoticon)]
[" src="ui/emoticons/]
[integer from Y to X]
[.gif">]
使用该列表可能会很慢,因为我需要在可能有 20-30-40 个表情符号的文本上运行该正则表达式。另外,可能需要处理 5-10-15 条短信。什么可能是一个优雅的解决方案?我准备为此使用第三方库或 jQuery。 PHP 预处理也是可能的。
【问题讨论】:
-
表情符号是放在JavaScript里的吗?为什么您不在 PHP 中也这样做,以便您可以在此之前
htmlentities()并拥有更简单、更安全和更清洁的解决方案?您甚至可以减少带宽和 CPU 使用率。 -
以及使用特殊符号的表情,你可以简单的让你的脚本明白
&lt;:-P是表情,而不是&lt;:-P。
标签: javascript jquery html regex