2013-07-28 74 views
0

My Oracle後端過程需要對一些加密值進行編碼,並通過URL將它們傳遞給ASP .NET MVC應用程序。我已經知道utl_i18n.escape_referenceutl_url.escape,但它們似乎無法像ASP.NET應用程序那樣對文本進行編碼。如何在PL/SQL中對此URI組件進行編碼?

問題是,+沒有得到編碼,並且當我調試ASP.NET應用程序時出現空間。

以下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中的字符集?

回答

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; 
/
+0

我尋找類似的東西,我想逃跑「+」號而不是其他保留字符。有沒有辦法逃避某些人物? –

+0

我想你只需要在那個點@Ash手動'REPLACE()'。 – Ben

+0

感謝您的快速回復!我想我找到了解決方案。事實證明,轉義特殊字符是沒有意義的,所以現在我編碼所有保留字符。 –

相關問題