用于清除来自textArea的输入的Oracle PL/SQL正则表达式



我有一个基本的编辑器,允许用户输入注释。我正在使用https://quilljs.com/编辑器的API。编辑器的内容将保存在数据库中,但在持久化数据之前,我想清理HTML内容,以删除Oracle PL/SQL中所有可能的JavaScript事件。在保存之前,我无法获得一个正则表达式来净化HTML内容。

示例:<p>This is <a href="http://www.test.com" rel="noopener noreferrer" target="_blank">www.test.com</a></p><p>ffffff</p><p><br></p><p><br></p><p>Review at <a href="http://www.1159pm.com" rel="noopener noreferrer" target="_blank" **onclick="alert()" ondblclick="alert()" onmouseover="alert()" onkeypress="alert()"**>www.1159PM.com</a> </p><p>fffffff</p>'

预期结果:<p>This is <a href="http://www.test.com" rel="noopener noreferrer" target="_blank">www.test.com</a></p><p>ffffff</p><p><br></p><p><br></p><p>Review at <a href="http://www.1159pm.com" rel="noopener noreferrer" target="_blank">www.1159PM.com</a> </p><p>fffffff</p>'

已删除所有Js事件。其他脚本和样式也应该删除。请帮助我使用Oracle RegEx来解决这个问题。

如果您的HTML被限制为有效的XHTML(即它有一个根元素,并且每个打开的标记都是关闭的(,那么您可以使用:

INSERT INTO table_name (value) VALUES (
XMLQuery(
'copy $i := $p1
modify (delete nodes ($i//@onclick, $i//@ondblclick, $i//@onmouseover, $i//@onkeypress))
return $i'
PASSING XMLTYPE('<html><p>This is <a href="http://www.test.com" rel="noopener noreferrer" target="_blank">www.test.com</a></p><p>ffffff</p><p><br /></p><p><br /></p><p>Review at <a href="http://www.1159pm.com" rel="noopener noreferrer" target="_blank" onclick="alert()" ondblclick="alert()" onmouseover="alert()" onkeypress="alert()">www.1159PM.com</a> </p><p>fffffff</p></html>')
AS "p1"
RETURNING CONTENT
).getClobVal()
)

对于表格:

CREATE TABLE table_name (value CLOB);

则插入的值为:

VALUE
<html>lt;p>这是<a href="http://www.test.com"rel=";noopener noreferrer";target="_空白">www.test.com<a>lt/p>lt;p>fffffff<p>lt;p>lt;br/>lt/p>lt;p>lt;br/>lt/p>lt;p>在<a href="http://www.1159pm.com"rel=";noopener noreferrer";target="_空白">www.1159PM.com<a>lt/p>lt;p>fffffff<p>lt/html>

最新更新