彻底解决页面文字编码乱码问题

在HTML页面中、Javascript脚本中、以及XML数据传输中,因为编码导致的问题不计其数。

 

本文提供一种方法,通过将字符串编码成Unicode格式,保证数据在展示和传输过程中万无一失。无论客户端浏览器如何改变编码,页面上的编码都不会乱码。

 

对于HTML/XML,采用 &# + 十位Unicode码 + ;  的形式格式化字符。

对于JS,采用 \u + 4位Unicode码 来格式化字符串.

 

 

示例采用C#编写,使用了 中文、俄文、韩文、日文 来展示。对于PHP,文章末尾将会提到。

 

 

首先,有2个String的扩展方法

 

它提供了2个方法,给测试页面使用。

 

测试页面(ASP.Net)

    /// <summary>
    /// Html Encode string, support all charactoers in the world
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string SafeHtmlEncode(this string str)
    {
        if (string.IsNullOrEmpty(str)) return string.Empty;
        return Regex.Replace(str
                    , "([^\\x00-\\x7F]|&|\\\"|\\<|\\>|'|\\n|\\r|\\t)"
                    , new MatchEvaluator(delegate(Match m) { string x = m.ToString(); return string.Format("&#{0};", (int)x[0]); })
                    , RegexOptions.ECMAScript | RegexOptions.Compiled
                    );
    }

    /// <summary>
    /// Html Encode string, support all charactoers in the world
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string HtmlEncodeSpecialCharactors(this string str)
    {
        if (string.IsNullOrEmpty(str)) return string.Empty;
        return Regex.Replace(str
                    , "[^\\x00-\\x7F]"
                    , new MatchEvaluator(delegate(Match m) { string x = m.ToString(); return string.Format("&#{0};", (int)x[0]); })
                    , RegexOptions.ECMAScript | RegexOptions.Compiled
                    );
    }


测试页面代码:

 

运行后得到的HTML:

 

 

这样,不管浏览器采用何种编码,页面都不会出现乱码。

 

 

 

==============================================

PHP

 

PHP的情况就复杂一点,需要考虑mysql的编码。这些姑且不论。

下面给出一点示例,将GBK进行HTML编码。仅作参考:

 

 

然后通过XML返回,这样就能够彻底杜绝乱码。

 

 

补充Javascript和ActionScript:

 

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值