HTML实体与网页编码(汉字转化为了html实体) .

http://blog.csdn.net/f438952359/article/details/7481267

HTML实体与网页编码(汉字转化为了html实体) .

htmlencodingfunctionstring正则表达式output汉字都转化为了html实体(十进制表示的Unicode编码),这样做的好处就是不管网页的编码是什么,都可以正常的显示汉字,而不会出现乱码,当然也适用于其他字符集。

在php中我们可以用mbstring的mb_convert_encoding函数实现这个正向及反向的转化。
如:

mb_convert_encoding (“你好”, “HTML-ENTITIES”, “gb2312”);    //输出:你好
mb_convert_encoding (“你好”, “gb2312”, “HTML-ENTITIES”);    //输出:你好
 
如果需要对整个页面转化,则只需要在php文件的头部加上这三行代码:
mb_internal_encoding(“gb2312”);  // 这里的gb2312是你网站原来的编码
mb_http_output(“HTML-ENTITIES”);
ob_start(‘mb_output_handler’);
 

Asp版 可以用下面这个函数来实现这个转化:

Function htmlentities(str)
    For i = 1 to Len(str)
        char = mid(str, i, 1)
        If AscW(char) > 0 then
            htmlentities = htmlentities & “&#” & Ascw(char) & “;”
        Else
            htmlentities = htmlentities & “&#” & (65536 + ascW(char)) & “;”
        End if
    Next
End Function

JS 版

 function htmlentities(str)
 {
      var r = “”;
      for( i=0; i<str.length; i++ )
      {
           temp = str.charCodeAt(i);
           r += “&#”+temp+”;”;
      }
     //  也可以用一句正则表达式解决
     // r = str.replace(/[\d\D]/g, function($0) { return “&#” + $0.charCodeAt(0) + “;”; });
     return r;
 }

asp.net (c#) 版
 private string GetHtmlEntities(string str)
  {
      string r = string.Empty;
       for (int i = 0; i < str.Length; i++)
       {
            r += “&#”+Char.ConvertToUtf32(str,i)+”;”;
       }
       return r;
 }

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

http://blog.gxnews.com.cn/u/11/a/1140713.html

js转为实体字符和php将实体字符转为汉字的方法 2013-09-10 16:02:58
js将汉字转为实体字符:

 function convert2Entity(str) {
    var len = str.length;
    var re = [];
    for (var i = 0; i < len; i++) {      var code = str.charCodeAt(i);       if (code > 256) {

            re.push(‘&#’ + code + ‘;’);
        } else {
            re.push(str.charAt(i));
        }
    }
    return re.join(”);
}

php将实体字符转为utf-8汉字的方法:

 function entity2utf8onechar($unicode_c){
    $unicode_c_val = intval($unicode_c);
    $f=0x80; // 10000000
    $str = “”;
    // U-00000000 – U-0000007F:   0xxxxxxx
    if($unicode_c_val <= 0x7F){      $str = chr($unicode_c_val);     }   //U-00000080 – U-000007FF:  110xxxxx 10xxxxxx   else if($unicode_c_val >= 0x80 && $unicode_c_val <= 0x7FF){       $h=0xC0; // 11000000        $c1 = $unicode_c_val >> 6 | $h;

        $c2 = ($unicode_c_val & 0x3F) | $f;
        $str = chr($c1).chr($c2);
    }
    //U-00000800 – U-0000FFFF:  1110xxxx 10xxxxxx 10xxxxxx
    else if($unicode_c_val >= 0x800 && $unicode_c_val <= 0xFFFF){         $h=0xE0; // 11100000        $c1 = $unicode_c_val >> 12 | $h;

        $c2 = (($unicode_c_val & 0xFC0) >> 6) | $f;
        $c3 = ($unicode_c_val & 0x3F) | $f;
        $str=chr($c1).chr($c2).chr($c3);
    }
    //U-00010000 – U-001FFFFF:  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    else if($unicode_c_val >= 0x10000 && $unicode_c_val <= 0x1FFFFF){         $h=0xF0; // 11110000        $c1 = $unicode_c_val >> 18 | $h;

        $c2 = (($unicode_c_val & 0x3F000) >>12) | $f;
        $c3 = (($unicode_c_val & 0xFC0) >>6) | $f;
        $c4 = ($unicode_c_val & 0x3F) | $f;
        $str = chr($c1).chr($c2).chr($c3).chr($c4);
    }
    //U-00200000 – U-03FFFFFF:  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    else if($unicode_c_val >= 0x200000 && $unicode_c_val <= 0x3FFFFFF){       $h=0xF8; // 11111000        $c1 = $unicode_c_val >> 24 | $h;

        $c2 = (($unicode_c_val & 0xFC0000)>>18) | $f;
        $c3 = (($unicode_c_val & 0x3F000) >>12) | $f;
        $c4 = (($unicode_c_val & 0xFC0) >>6) | $f;
        $c5 = ($unicode_c_val & 0x3F) | $f;
        $str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5);
    }
    //U-04000000 – U-7FFFFFFF:  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

    else if($unicode_c_val >= 0x4000000 && $unicode_c_val <= 0x7FFFFFFF){         $h=0xFC; // 11111100        $c1 = $unicode_c_val >> 30 | $h;

        $c2 = (($unicode_c_val & 0x3F000000)>>24) | $f;
        $c3 = (($unicode_c_val & 0xFC0000)>>18) | $f;
        $c4 = (($unicode_c_val & 0x3F000) >>12) | $f;
        $c5 = (($unicode_c_val & 0xFC0) >>6) | $f;
        $c6 = ($unicode_c_val & 0x3F) | $f;
        $str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5).chr($c6);
    }
    return $str;
}
function entities2utf8($unicode_c){
    $unicode_c = preg_replace(“/\&\#([\da-f]{5})\;/es”, “entity2utf8onechar(‘\\1’)”, $unicode_c);

    return $unicode_c;
}

 

php将unicode转为utf-8方法
在php5.0及以上版本中提供了json_encode, json_decode方法。在使用json_encode变量的时候,如果变量里含有中文的话,会将中文转为unicode格式。所以在想是否可以通过json_decode将unicode转为中文呢?实际测试发现是可以的,但对单一的字符串发现有些问题。

对于简单的字符串,发现有时候使用json_decode转的化,结果直接为空了。但将字符串替换为数组然后在转就可以了。下面就有了下面封装的代码。

 function unicode2utf8($str){
        if(!$str) return $str;
        $decode = json_decode($str);
        if($decode) return $decode;
        $str = ‘[“‘ . $str . ‘”]’;
        $decode = json_decode($str);
        if(count($decode) == 1){
                return $decode[0];
        }
        return $str;
}


使用这个方法可以很好的将unicode编码转为utf-8编码。
 

原文链接:,转发请注明来源!
评论已关闭。