我有一个带有 HTML 文档的 clob。如何用文本替换其中的所有脚本?
Posted
技术标签:
【中文标题】我有一个带有 HTML 文档的 clob。如何用文本替换其中的所有脚本?【英文标题】:I have a clob with HTML document. How to replace all scripts in it with text? 【发布时间】:2019-08-12 16:25:30 【问题描述】:例如,我有以下 html 文档:
<b>Hello world</b>
<script>window.alert('Hello world')</script>
我需要得到:
<b>Hello world</b>
<script>window.alert('Hello world')</script>
我想编写一个 Oracle PL/SQL 函数来进行这种转换。
我使用 Oracle 11。我尝试使用 regexp 和 Oracle XML 函数但不成功。
【问题讨论】:
对于 clob,尝试 DBMS_XMLGEN.CONVERT ***.com/a/37663607/3061852 谢谢你。问题是只有 【参考方案1】:也许您可以使用(内置)REPLACE 功能。示例(使用 Oracle 11g 测试,请参阅 dbfiddle):
测试表
create table myclobs ( col clob ) ;
insert into myclobs ( col )
values ( '<b>Hello world</b><script>window.alert(''Hello world'')</script>');
select * from myclobs ;
-- result
COL
<b>Hello world</b><script>window.alert('Hello world')</script>
查询
select
replace(
replace( col, '</script>','</script>' )
, '<script>','<script>'
) as scripttagsreplaced
from myclobs ;
-- result
SCRIPTTAGSREPLACED
<b>Hello world</b><script>window.alert('Hello world')</script>
(“内部”REPLACE 转换结束标签,“外部”REPLACE 转换开始标签。)如果这对您有用,并且您仍想编写自己的函数,只需编译以下代码:
-- rst: Replace the Script Tags
create or replace function rst( theclob clob )
return clob
is
begin
return replace(
replace( theclob, '</script>','</script>' )
, '<script>','<script>'
) ;
end ;
/
有了这个,你可以 SELECT ... 如下:
select rst( col ) from myclobs ;
【讨论】:
以上是关于我有一个带有 HTML 文档的 clob。如何用文本替换其中的所有脚本?的主要内容,如果未能解决你的问题,请参考以下文章