【问题标题】:I have a clob with HTML document. How to replace all scripts in it with text?我有一个带有 HTML 文档的 clob。如何用文本替换其中的所有脚本?
【发布时间】:2019-08-12 16:25:30
【问题描述】:

例如,我有以下 HTML 文档:

<b>Hello world</b>
<script>window.alert('Hello world')</script>

我需要得到:

<b>Hello world</b>
&lt;script&gt;window.alert('Hello world')&lt;/script&gt;

我想编写一个 Oracle PL/SQL 函数来进行这种转换。

我使用 Oracle 11。我尝试使用 regexp 和 Oracle XML 函数但不成功。

【问题讨论】:

  • 对于 clob,尝试 DBMS_XMLGEN.CONVERT stackoverflow.com/a/37663607/3061852
  • 谢谢你。问题是只有

标签: html oracle


【解决方案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>','&lt;/script&gt;' )
  , '<script>','&lt;script&gt;' 
  ) as scripttagsreplaced
from myclobs ;

-- result
SCRIPTTAGSREPLACED
<b>Hello world</b>&lt;script&gt;window.alert('Hello world')&lt;/script&gt;

(“内部”REPLACE 转换结束标签,“外部”REPLACE 转换开始标签。)如果这对您有用,并且您仍想编写自己的函数,只需编译以下代码:

-- rst: Replace the Script Tags
create or replace function rst( theclob clob )
return clob
is
begin  
  return  replace( 
    replace( theclob, '</script>','&lt;/script&gt;' ) 
  , '<script>','&lt;script&gt;' 
  ) ;
end ;
/

有了这个,你可以 SELECT ... 如下:

select rst( col ) from myclobs ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多