11
09 May.
关于《SiteServer CMS 中 ajaxProxy 改进》升级到 SiteServer CMS 3.3 Beta 3 表单提交编码出错的问题
最后更新: 2009/05/11 | 评论: 0 | 关键词: 编码 表单 错误 乱码
SiteServer CMS 一个月前就升级到了 3.3 Beta 3,因为原来的后台结构有所变化,所以导致本站的留言和友情链接都无法使用,估计很多使用了我代码的朋友也会有这个问题
提交没有什么问题,可以是如果返回系统后台一看,全是乱码。很显然是编码的问题,今天仔细研究了一下,原来 SiteServer CMS 3.3 Beta 3 将 Ajax 地址中 inner 变成了 首字大写 Inner,从而导致了无法识别地址而采用了默认编码提交方式,从而产生了乱码。
其实这应该是我上次改进代码的疏忽,严重地址的时候没有过滤掉大小写,今天改了改,很简单,加个地址变成小写就可以了,以下是全部代码:
- <%@ Page Language="VB" AutoEventWireup="true"%>
- <%@ Import Namespace="System"%>
- <script runat="server">
- Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
- Dim CharSet As String = Request.QueryString("charset")
- If String.IsNullOrEmpty(CharSet) Then CharSet = "GB2312"
- Dim Encode As Text.Encoding = Text.Encoding.GetEncoding(CharSet)
- Dim Url As String = System.Web.HttpUtility.ParseQueryString(Request.Url.Query, Encode).Get("url").Trim
- If Url.Contains("?") Then
- Url &= "&isCrossSite=True"
- Else
- Url &= "?isCrossSite=True"
- End If
- Dim Mothod As String = Request.HttpMethod.ToLower
- Dim Result As String = ""
- Try
- With New Net.WebClient
- Dim Cookies As String = ""
- If Request.Cookies IsNot Nothing Then
- For Each Key As String In Request.Cookies.Keys
- Cookies &= String.Format("{0}={1}; ", Key, Request.Cookies(Key).Value)
- Next
- End If
- Cookies = Cookies.Trim
- If Cookies.EndsWith(";") Then Cookies = Cookies.Substring(0, Cookies.Length - 1)
- .Headers.Add(Net.HttpRequestHeader.Cookie, Cookies)
- Dim retByte As Byte()
- If Mothod <> "post" Then
- retByte = .DownloadData(Url)
- If retByte IsNot Nothing Then Result = Text.Encoding.UTF8.GetString(retByte)
- Else
- '表单提交的内容则进行编码转换,否则直接提交
- Dim sUrl As String = Url.ToLower
- If sUrl.Contains("/inner/comment/") Or sUrl.Contains("/inner/search/") Or sUrl.Contains("/inner/input/") Then
- .Headers.Add(Net.HttpRequestHeader.ContentType, "application/x-www-form-urlencoded")
- Dim PostForm As New NameValueCollection
- For Each Key As String In Request.Form.Keys
- PostForm.Add(Key, HttpUtility.UrlEncode(Request.Form(Key), Encode))
- Next
- retByte = .UploadValues(Url, "POST", PostForm)
- If retByte IsNot Nothing Then Result = Encode.GetString(retByte)
- Else
- retByte = .UploadValues(Url, "POST", Request.Form)
- If retByte IsNot Nothing Then Result = Text.Encoding.Default.GetString(retByte)
- End If
- End If
- Cookies = .ResponseHeaders(Net.HttpResponseHeader.SetCookie)
- If Not String.IsNullOrEmpty(Cookies) Then
- Cookies = Cookies.Replace(vbCrLf, ";")
- For Each Cook As String In Cookies.Split(";")
- If Cook.Contains("=") Then
- Dim cookieNameValue As String() = Cook.Split("=")
- Response.Cookies.Set(New Web.HttpCookie(cookieNameValue(0).Trim, cookieNameValue(1).Trim))
- End If
- Next
- End If
- End With
- Catch ex As Exception
- Result = String.Format("<p style=""color:red;text-align:center;"">服务器获取文件内容出错:{0}<br />网址:{1}<br />编码:{2}</p>", ex.Message, Url, CharSet)
- End Try
- Response.Write(Result)
- Response.End()
- End Sub
- </script>
红色为修改部分,目前应该没有什么问题了。注意的是测试环境:分站编码 为 UTF-8;主站编码 为 GB2312
· 本文由 木炭 发布在《激情燃烧的木炭》 上,原文地址为:http://www.woodcoal.cn/technology/asp/2009511-370-519.html(转载请保留本信息、全文内容和链接)
发表评论