gpt4 book ai didi

oracle - PL/SQL 转换特殊字符

转载 作者:行者123 更新时间:2023-12-03 23:58:12 24 4
gpt4 key购买 nike

我在一个填充了表中数据的简短 PL/SQL 函数的帮助下创建了一个简单的 XML 1.0 文件。

表中的数据还包含 HTML 字符,如 <>、& 等。
对于这些特殊字符,我构建了一个简短的搜索和替换功能,如下所示:

 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但由于“特殊字符转转义字符转换失败”,此函数会引发错误。

    更新 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;

    关于oracle - PL/SQL 转换特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34218871/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com