如何在PL / SQL中编码此URI组件?

时间:2013-07-28 08:29:56

标签: asp.net oracle iis plsql urlencode

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

1 个答案:

答案 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;
/