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

手机收到的短信:

价格 80 增值税


编辑

需要向 URL 传递一些变量。因为我有一个发送短信的程序,而且我需要将变量发送到 URL(URL 提供商短信系统)。必须以编码(ISO 8859-1)发送字符串(用户在我的程序中编写的message mobile )。

例如,PHP 中的这段代码运行良好:

$texto=urlencode($textoOriginal);

此代码返回转换后的字符串:

价格+80%2BVAT


编辑 2

我认为我的代码是错误的。因为如果我发送编码为“price+80%2BVAT”的相同字符串,为什么在 VB.NET 代码中无法运行而在 PHP 中运行良好?是相同的编码字符串。

4

2 回答 2

3

我看到您正在将字符串传递给查询字符串,所以这是您要使用的方法。

当您请求返回查询字符串时,您需要做的是使用System.Web.HttpUtility.UrlDecode

基本上你做以下

  1. UrlEncode 原文
  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

这是我的结果

原始字符串:这是带有 + 符号的我的字符串。
编码字符串:this+is+My+STRING+with+a+%2B+symbol。
解码字符串:这是带有 + 符号的我的字符串。

编辑:
看到你的编辑后,试试下面这个......

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 回答