思路来源

之前在次碳酸钴的博客闲逛的时候,发现前辈开发了独特的XEditor,觉得不错,但是貌似没有开源,于是不能拿来主义了,就自己开发了一下。

近日前辈的网站已经“挂了”,貌似是因为评论区广告太多。着实感觉心疼,如此好的一个纯粹的技术博客被逼得如此下场,心痛,心累。

言归正传,评论区有彩蛋,可以使用<x标签>来代替传统的<img><code><span><a>这四种常用标签。这个标签不是浏览器的标准的标签,服务器内部把他解析成以上几种标签。最后存入数据库的是标准标签。

使用例子

下面是几个使用的例子:

<x href="https://www.luckyscript.me">test</x>

这个标签会被解析成

<a href="https://www.luckyscript.me" target="_blank" rel="nofollow">test</a>

效果: test

由于安全性问题,这种场景下,标签只会对http(s)开头的有效链接做解析成<a>。如果不是这种情况,会毫不留情的解析成<span>

<x src="https://www.luckyscript.me/public/upload/article_nblog.png">

这个标签会被解析成img

<img src="https://www.luckyscript.me/public/upload/article_nblog.png" />

效果:

<x code="javascript">var</x>

这种场景会被解析成:

<code class="language-javascript">var</code>

效果: var

其余场景,如果是合法标签,则会转为<span>,否则则会进行实体化,防止xss的发生。

代码实现

parse部分,思路参考了leizongminxss包。实现起来也没多大难度,就不一一分析了。

https://github.com/luckyscript/x-filter