2016-08-16 7 views
-1

私の.asp WebページではうまくいったEscape機能に困惑していますが、.Net aspx Webページでは機能しません。.Net ..でVBScript Escape()関数を使用できますか?

変数はこのように宣言されています。

Dim sProtocols As String 

このコンテンツは(ファイルを読むことによって)sProtocols変数にロードされます。

[EML Email forwarding] 
ServiceName=EML FORWARD 
ProtocolKey=SMTP_ANY_DESTN 
PortBaudRate= 
PortDataBits= 
PortParity= 
PortStopBits= 
PortFlowControl=OFF 
DialNumber= 
ServicePrompt= 
ServiceLogoff= 
CarrierPrefix= 
AccessKey= 
MaxPages=999 
MaxLength=250 
MaxAttempts=1 
X25NUA= 
X25Prompt=your.domain.com 

次に、エスケープ関数がsProtocolsの内容で呼び出されます。

sTemp = Escape(sProtocols) 

ここでは、Webページに埋め込むことができる完全に形成された出力です。 %の5Dの%0D%0AServiceName%3DEML%20FORWARD%0D%の0Dの%0APortDataBits%の3D%0Dの%の0APortParity%の3次元%の0Dの%の0APortStopBits%0AProtocolKey%3DSMTP_ANY_DESTN%0D%の0APortBaudRateの%の3Dを20forwarding%20Email

%の5BEML% %3D%0D%0APortFlowControl%3DOFF%0D%0ADialNumber%3D%0D%0AServicePrompt%3D%0D%0AServiceLogoff%3D%0D%0acarrierPrefix%3D%0D%0AAccessKey%3D%0D%0AMaxPages%3D999%0D%0AMaxLength%3D250 %0D%の0AMaxAttempts%3D1%の0D%0AX25NUAの%の3次元%の0D%0AX25Prompt%3Dyour.domain.comの%0D%0A%

はしかし、ウェブページのネットのASPXのバージョンで私は、これらのエラーを取得します。

[FormatException:入力文字列が正しい形式ではありませんでした。】
Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(文字列値、のNumberFormatInfoのNumberFormat)213
Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger (文字列値)+90

[InvalidCastExceptionが:文字列から変換 "[EMLメール] ServiceNを転送する" '整数' を入力するのが有効ではありません]
Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(文字列値) +238
CでASP.emi2_aspx .__ Render__control1(たHtmlTextWriter __w、コントロールparameterContainer):\のinetpub \ wwwrootに\ EmsgwebOUT_NETEDITW.aspx:188
System.Web.UI.Control.RenderChildrenInternal(指定されたHtmlTextWriterライター、ICollectionを子供)268
システム。 WebUI.Control.RenderChildren(HtmlTextWriterライター)+13
System.Web.UI.Page.Render(HtmlTextWriter writer)+29
System.Web.UI.Control.RenderControlInternal(HtmlTextWriterライター、ControlAdapterアダプター)+66
System.Web.UI.Control.RenderControl(HtmlTextWriterライター、ControlAdapterアダプター)+100
System.Web.UI.Control.RenderControl(HtmlTextWriter writer)+25
System.Web.UI.Page.ProcessRequestMain(ブールincludeStagesBeforeAsyncPoint、ブールのincludeStagesAfterAsyncPoint)1303

は、私はそれは常に使用するために、このような単純な関数でエスケープする前に働いていたと、理解していません。

Escape関数の文字列を準備するために何か他の処理を行う必要がありますか、これを行う別の方法がありますか?

+1

[HttpServerUtility.UrlEncodeメソッド](https://msdn.microsoft.com/en-us/library/zttxte6w(v = vs.110).aspx)を探している必要があります。... VBScript!= VB.Net – Filburt

+0

ありがとうFilburt、しかし、UrlEncodeのために%20アポストロフィを%27にエンコードしていないし、+文字を保持していないためです。 – rangi

答えて

0

は、C#の選択肢のいずれかを使用して検討した:%5Dの%0D%0AServiceName%3DEML%20FORWARD%0D%0AProtocolKey%3DSMTP_ANY_DESTN%0D%0APortBaudRate%3D%を20forwarding%20Email

string s = @"[EML Email forwarding] 
ServiceName=EML FORWARD 
ProtocolKey=SMTP_ANY_DESTN 
PortBaudRate= 
PortDataBits= 
PortParity= 
PortStopBits= 
PortFlowControl=OFF 
DialNumber= 
ServicePrompt= 
ServiceLogoff= 
CarrierPrefix= 
AccessKey= 
MaxPages=999 
MaxLength=250 - 
MaxAttempts=1 
X25NUA= 
X25Prompt=your.domain.com"; 

string s2 = System.Uri.EscapeDataString(s); 

Console.WriteLine(s2); 

%の5BEML% 0D%0APortDataBits%3D%0D%0APortParity%3D%0D%0APortStopBits%3D%0D%0APortFlowControl%3DOFF%0D%0ADialNumber%3D%0D%0AServicePrompt%3D%0D%0AServiceLogoff%3D%0D%0ACarrierPrefix%3D%0D% 0AAccessKey%の3次元%が0D%0AMaxPages%3D999%0D%0AMaxLength%3D250%0D%0AMaxAttempts%3D1%0D%の0AX25NUA%の三次元%の0D%0AX25Prompt%3Dyour.domain.com

+0

ありがとう!私はC#によって延期されたliitleでしたが、これはVBScriptでもこれを呼び出すことで動作しているようです(ユーザ "dtb"を確認してください)。 sTemp = Uri.EscapeDataString(sProtocols) – rangi

関連する問題