1

我的 Oracle 后端过程需要对一些加密值进行编码,并通过 URL 将它们传递给 ASP .NET MVC 应用程序。我已经知道utl_i18n.escape_referenceand 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 中的字符集?

4

1 回答 1

3

这是因为+是 ; 的保留字符UTL_URL.ESCAPE()。去引用:

保留字符包括:

  • 分号 (;) 斜杠 (/)、问号 (?)、冒号 (:)、at 符号 (@)、和号 (&)、等号 (=)、加号 (+)、美元符号 ($) , 和逗号 (,)

许多保留字符用作 URL 中的分隔符。您应该使用 escape_url 对此处列出的字符以外的字符进行转义。此外,要在 URL 的查询字符串的名称-值对中使用保留字符,这些字符必须单独转义。

有一个布尔参数escape_reserved_characters,它允许您转义+

指示是否应转义 URL 保留字符。如果设置为 TRUE,则保留的和非法的 URL 字符都被转义。否则,只会转义非法的 URL 字符。默认值为假。

您不能在 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;
/
于 2013-07-28T11:15:28.900 回答