显示列表

如有多个网站,它们页面的编码不一样,有些是 UTF-8 编码,有些是 GB2312 编码。
要发评论到一个共同的页面,这时如果双方的编码不一样,那么中文字就成乱码了。
可以先把数据转成URL编码格式,再发送。还要指定编码,这样接收时才能对应解码。

URL编码格式,如“汉”字:
GB2312编码:BABA URL格式:%BA%BA
UTF-8 编码:E6B189 URL格式:%E6%B1%89
就是在每个字节编码前加个百分号。数字、字母不变,空格用加号代替。


页面是GB2312编码,发表代码:

1) 传送UTF-8编码
<script language="JavaScript">
function OnSubmit()
{
    var obj = document.getElementById('Content');
    var obj2 = document.getElementById('Content2');

    obj.value = encodeURI(obj2.value); // 返回 UTF-8 编码 URI 的字符串

    return true;
}
</script>

<form method="post" action="http://www.utf8.com/post_save.aspx" onsubmit="return OnSubmit();">
<textarea name="Content2" rows="10" cols="60"></textarea>
<textarea name="Content" rows="10" cols="60" style="display:none"></textarea>
<input type="hidden" name="Charset" value="UTF-8">
<input type="submit" value="提交" />
</form>




2) 传送GB2312编码
<script language="JavaScript">
function OnSubmit()
{
    var obj = document.getElementById('Content');
    var obj2 = document.getElementById('Content2');

    obj.value = UrlEncode(obj2.value);

    return true;
}

function UrlEncode(str)
{
    var r = '';
    var strSpecial = '!"#$%&\'()*+,/:;<=>?[]^`{|}~%';

    for(var i = 0; i < str.length; i++)
    {
        var chr = str.charAt(i);
        var cHex = GetHexGB2312(chr); // 返回字符的 GB2312 编码的十六进制值。JavaScript 可以获取字符的 Unicode 编码;VBScript 可以获取字符的 GB2312 编码。
        
        // 开始转成编码的URL格式
        if(parseInt('0x' + cHex) > 0x7f) // 大于 126
        {
            r += '%' + cHex.slice(0, 2) + '%' + cHex.slice(-2);
        }
        else // ASCII 中的字符,如字母、数字、符号等。
        {
            if(chr == ' ')
                r += '+';
            else if(strSpecial.indexOf(chr) != -1)
                r += '%' + cHex;
            else
                r += chr;
        }
    }

    return r;
}
</script>
<script language="VBScript">
<!--
Function GetHexGB2312(s)
    GetHexGB2312 = hex(asc(s))
End Function
//-->
</script>
<form method="post" action="http://www.utf8.com/post_save.aspx" onsubmit="return OnSubmit();">
<textarea name="Content2" rows="10" cols="60"></textarea>
<textarea name="Content" rows="10" cols="60" style="display:none"></textarea>
<input type="hidden" name="Charset" value="GB2312">
<input type="submit" value="提交" />
</form>

接收页面是UTF-8编码,C#代码:

<%@ Page Language="C#" %>
<%@ Import Namespace="System" %>
<script language="C#" runat="server">
private System.Text.Encoding encodingUTF8 = System.Text.Encoding.GetEncoding("UTF-8");
private System.Text.Encoding encodingGB2312 = System.Text.Encoding.GetEncoding("GB2312");

public void Page_Load(object sender, System.EventArgs e)
{
    string content = Request.Form["Content"].ToString();
    string charset = Request.Form["Charset"].ToString(); // 内容的编码

    if (charset == "GB2312")
    {
        content = System.Web.HttpUtility.UrlDecode(content, encodingGB2312);
    }
    else
    {
        content = System.Web.HttpUtility.UrlDecode(content, encodingUTF8);
    }

    Response.Write(content);
}
</script>

标签:网页编码 
返回摘要 | 分类(网站编程) | 访问(587) | 编辑