1

私の Oracle バックエンド プロシージャは、いくつかの暗号化された値をエンコードし、URL を介して ASP .NET MVC アプリケーションに渡す必要があります。utl_i18n.escape_referenceとについては既に知っていutl_url.escapeますが、ASP.NET アプリケーションと同じ方法でテキストをエンコードできないようです。

問題は、ASP.NET アプリケーションをデバッグするときに + がエンコードされず、スペースとして表示されることです。

次の 3 つのステートメントはすべて+、TOAD で実行すると ' ' を返しますが、" %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()引用する:

予約文字は次のもので構成されます。

  • セミコロン (;) スラッシュ (/)、疑問符 (?)、コロン (:)、アットマーク (@)、アンパサンド (&)、等号 (=)、プラス記号 (+)、ドル記号 ($) 、およびコンマ (,)

予約文字の多くは、URL の区切り文字として使用されます。ここにリストされている以外の文字は、escape_url を使用してエスケープする必要があります。また、URL のクエリ文字列の名前と値のペアで予約文字を使用するには、それらの文字を個別にエスケープする必要があります。

escape_reserved_characters以下をエスケープできるブール値パラメータがあり+ます。

URL 予約文字をエスケープする必要があるかどうかを示します。TRUE に設定すると、予約済みの URL 文字と不正な 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;
/
于 2013-07-28T11:15:28.900 に答える