我正在使用此代码将字符串转换为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提供商SMS系统)。用户在程序中写入的字符串( message mobile )必须以编码方式发送(ISO 8859-1)。
例如,PHP中的这段代码运行良好:
$texto=urlencode($textoOriginal);
此代码返回此字符串已转换:
价+ 80%2BVAT
编辑2
我认为我的代码错了。因为如果我发送相同的字符串编码“价格+ 80%2BVAT”,为什么在VB.NET代码中运行并且在PHP中运行正常?是相同的编码字符串。
答案 0 :(得分:3)
我看到你将字符串传递给查询字符串,所以这是你想要使用的方法。
请求查询字符串后,您需要执行的操作是使用System.Web.HttpUtility.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
这是我的结果
原始字符串:这是带有+符号的我的字符串 编码字符串:此+为+我+ + STRING + + + + + + 2B +符号 解码字符串:这是带有+符号的我的字符串。
修改强>
看到你的编辑后,请尝试以下这一点......
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"))
答案 1 :(得分:2)
这是网址编码的一部分 - +
表示网址中的空格。
换句话说,如果您实际想要URL编码,这是正确的行为。如果您不这样做,请准确说明您要做的事情。