HTML实体解码为特殊字符

时间:2013-07-05 09:12:53

标签: html sql oracle

我想在输出中显示特殊符号。 例如:我的文字可能包含&lt;&gt等实体代码;等等 我想在输出中将其显示为<>。我需要在SQL中执行此操作。 我搜索了这个并获得了一个功能,

select dbms_xmlgen.convert('ABC <; ',0) from dual

这是相反的过程,它将输出生成为'ABC&lt;'

我尝试过解码但不起作用。我甚至改变了sql命令, select dbms_xmlgen.convert('ABC <; ',1) from dual,其中1代表entity_decode,但我没有得到所需的输出。

2 个答案:

答案 0 :(得分:4)

我没有使用DBMS_XMLGEN.convert,而是使用了函数UTL_I18N.UNESCAPE_REFERENCE:

SELECT UTL_I18N.UNESCAPE_REFERENCE('ABC &lt; ') FROM DUAL;

结果:

ABC < 

有关Oracle doc的更多信息:http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_i18n.htm#i998992

答案 1 :(得分:1)

尝试类似:

SELECT DBMS_XMLGEN.CONVERT('ABC &lt; ', DBMS_XMLGEN.ENTITY_DECODE) FROM DUAL

另外,请参阅Oracle docs

修改

好的,显然这是某些Oracle版本中的错误(9.2.0.1和10.1.0.2,似乎如此)。 Somebody solved it包装函数。我不知道应该如何解决它,但我值得尝试。创建一个这样的函数:

CREATE OR REPLACE FUNCTION
   xml_decode(
      i_xml_string IN VARCHAR2
   )
   RETURN VARCHAR2
IS
BEGIN
   RETURN
      DBMS_XMLGEN.convert(
         i_xml_string,
         DBMS_XMLGEN.ENTITY_DECODE
      );
END;

然后使用它:

SELECT xml_decode('ABC &lt; ') FROM DUAL;

如果有效,请告诉我们。