我的Oracle后端程序需要对一些加密值进行编码,并通过URL将它们传递给ASP .NET MVC应用程序。我已经了解utl_i18n.escape_reference
和utl_url.escape
,但它们似乎无法以与ASP.NET应用程序相同的方式对文本进行编码。
问题在于,当我调试ASP.NET应用程序时,+不会被编码并作为空格出现。
当我在TOAD中运行时,以下3个语句都返回“+
”,而我期待“%2B
”:
select utl_i18n.escape_reference('+') from dual
select utl_url.escape('+') from dual
select utl_i18n.escape_reference(utl_url.escape('+')) from dual
也许它与字符集有关?如何检查IIS中的字符集?
答案 0 :(得分:2)
这是因为+
是UTL_URL.ESCAPE()
的保留字符;引用:
保留字符包括:
- 分号(;)斜线(/),问号(?),冒号(:),符号(@),&符号(&),等号(=),加号(+),美元标志($), 和逗号(,)
许多保留字符用作URL中的分隔符。您 应该使用escape_url来转义超出此处列出的字符。 另外,要使用名称 - 值对中的保留字符 查询URL的字符串,这些字符必须单独转义。
有一个布尔参数escape_reserved_characters
,可让您转义+
:
指示是否应转义URL保留字符。如果 设置为TRUE,保留和非法URL字符都被转义。 否则,只会转义非法的URL字符。默认 值为FALSE。
您不能在SQL中使用布尔值,因此您必须在PL / SQL
中执行此操作declare
l_escaped_url varchar2(10);
begin
l_escaped_url := utl_url.escape('+', True);
dbms_output.put_line(l_escaped_url);
end;
/