加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – PL / SQL转换特殊字符

发布时间:2020-12-12 13:14:55 所属栏目:百科 来源:网络整理
导读:我正在使用填充表中数据的简短PL / SQL函数创建一个简单的 XML 1.0文件. 表格中的数据还包含HTML字符,例如gt ;,等等. 对于这些特殊字符,我构建了一个简短的搜索和替换函数,如下所示: newXmlString := REPLACE(xmlString,'','amp;' ); newXmlString := REPLA
我正在使用填充表中数据的简短PL / SQL函数创建一个简单的 XML 1.0文件.

表格中的数据还包含HTML字符,例如<&gt ;,&等等.
对于这些特殊字符,我构建了一个简短的搜索和替换函数,如下所示:

newXmlString := REPLACE(xmlString,'&','&amp;' );
 newXmlString := REPLACE(newXmlString,'','' );
 newXmlString := REPLACE(newXmlString,'<','&lt;' );
 newXmlString := REPLACE(newXmlString,'>','&gt;' );
 newXmlString := REPLACE(newXmlString,'"','&quot;' );
 newXmlString := REPLACE(newXmlString,'''','&apos;' );

现在表中有更多数据会导致XML文件由于特殊控制字符(https://en.wikipedia.org/wiki/Control_character)而无法验证:

> ETX(文字结束)
> SYN(同步空闲)

注意:并非每个控制字符都会破坏XML文件的验证!仍然可以进行换行或回车.

当然我现在也可以搜索和替换它们,例如:

newXmlString := REPLACE(newXmlString,chr(3),'' ); -- ETX end of text

但是,是否有一个内置函数或类似于我可以与PL / SQL一起使用而不用列表和搜索替换它们的库?

更新1

我也尝试使用函数dbms_xmlgen.getxml但是这个函数抛出一个错误,因为’转义char转换失败的特殊字符’.

更新2

我尝试使用REGEXP_REPLACE(STRING_VALUE,'[[:cntrl:]]’),但这也会删除我们想要保留的换行符,也不会影响XML文件的验证.

解决方法

TRANSLATE确实是要走的路.使用CHR函数构建一个字符串并仅应用一次.
以下是ETX的示例:3,EOT:4和SYN:22.您可以在需要时附加其他人.

注意字符串开头的’a’作为第二个字符串中的唯一字符返回.
此功能需要一个未消除的字符.

FUNCTION clean_control( in_text IN VARCHAR2 )
   RETURN VARCHAR2
IS
   v_search  VARCHAR2( 30 ) := 'a' || CHR( 3 ) || CHR( 4 ) || CHR( 22 );
BEGIN
   RETURN TRANSLATE( in_text,v_search,'a' );
END;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读