2

このコードを使用して、文字列を ISO8859-1 に変換しています

baseurl = "http://myurl.com/mypage.php"
                client = New WebClient
                client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
                client.QueryString.Add("usuario", user)
                client.QueryString.Add("password", pass)
                client.QueryString.Add("ruta", 2)
                client.QueryString.Add("remitente", Me.txtRemite.Text)
                If Me.chkPRefijo.Checked = True Then
                    client.QueryString.Add("destinatarios", Me.LookUpEdit1.EditValue & Me.dtsMvl.Tables(0).Rows(x).Item("movil"))
                Else
                    client.QueryString.Add("destinatarios", Me.dtsMvl.Tables(0).Rows(x).Item("movil"))
                End If
                textoSms = Me.mmTexto.Text
                textoSms = System.Web.HttpUtility.UrlEncode(textoSms, System.Text.Encoding.GetEncoding("ISO-8859-1"))
                client.QueryString.Add("mensaje", textoSms)
                client.QueryString.Add("reporte", 1)
                data = client.OpenRead(baseurl)
                reader = New StreamReader(data)
                s = reader.ReadToEnd()
                data.Close()
                reader.Close()

しかし問題は、ユーザーがこの文字を書くときです: +


例:

ユーザーは私のアプリに書き込みます:

定価80+消費税

アプリでエンコードされた文字列と、この文字列がプロバイダーに送信されます。

価格+80%2bVAT

モバイルで受信した SMS:

価格 80 付加価値税


編集

URL にいくつかの変数を渡す必要があります。SMS を送信するプログラムがあり、変数を URL (URL プロバイダー SMS システム) に送信する必要があるためです。文字列 (ユーザーがプログラムに書き込むメッセージ モバイル) は、エンコードして送信する必要があります (ISO 8859-1)。

たとえば、PHP の次のコードは問題なく動作します。

$texto=urlencode($textoOriginal);

このコードは、次の文字列を変換して返します。

価格+80%2BVAT


編集2

私のコードは間違っていると思います。"price+80%2BVAT" でエンコードされた同じ文字列を送信すると、VB.NET コードでは実行されず、PHP では正常に実行されるのはなぜですか? 同じエンコードされた文字列です。

4

2 に答える 2

3

文字列をクエリ文字列に渡していることがわかりました。これが使用したいメソッドです。

クエリ文字列を要求するときに行う必要があるのは、使用ですSystem.Web.HttpUtility.UrlDecode

基本的には次のことを行います

  1. 元のテキストを URL エンコードする
  2. QueryString に渡す
  3. クエリ文字列をリクエストする
  4. 元のテキストを取得するには、それを UrlDecode します。

これが私が実行したテストで、うまくいくように見えました。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim str As String = "This is My STRING with a + symbol."
    Dim encoded As String = Server.UrlEncode(str)
    Dim decoded As String = Server.UrlDecode(encoded)

    Dim sb As New StringBuilder
    sb.Append("Original String: ")
    sb.Append(str)
    sb.Append("</br>")
    sb.Append("Encoded String: ")
    sb.Append(Replace(encoded, "%2b", "%2B"))
    sb.Append("</br>")
    sb.Append("Decoded String: ")
    sb.Append(decoded)

    Response.Write(sb.ToString)
End Sub

そして、これが私の結果です

元の文字列: これは + 記号が付いた My STRING です。
エンコードされた文字列: This+is+My+STRING+with+a+%2B+symbol.
デコードされた文字列: これは + 記号が付いた My STRING です。

編集:
あなたの編集を見た後、以下のビットを試してください...

textoSms = Replace(System.Web.HttpUtility.UrlEncode(Me.mmTexto.Text, System.Text.Encoding.GetEncoding("ISO-8859-1")), "%2b", "%2B")

ここにあるものを使用する代わりに...

    textoSms = Me.mmTexto.Text
    textoSms = System.Web.HttpUtility.UrlEncode(textoSms, System.Text.Encoding.GetEncoding("ISO-8859-1"))
于 2010-02-18T15:42:53.920 に答える
2

これはURLエンコードの一部です-URL+内のスペースを意味します。

つまり、実際にURLエンコードが必要な場合、これは正しい動作です。そうでない場合は、何をしようとしているのかを正確に説明してください。

于 2010-02-18T15:38:36.280 に答える