PHP编码转换函数 自动转换字符集支持数组转换
|
代码如下:// 自动转换字符集 支持数组转换 方案一要客户端提交数据时,指定所提交的编码,这时就需要多给一个用来指定编码的变量。 $string = $_GET['charset'] === 'gbk' ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str']; 对于这种情况,如果在没有约定或者我们不能控制客户端的情况下,似乎这种方案使用不是很好。 方案二直接由服务器端来检测所接收的数据编码。 这种方案当然是最理想了的了,现在问题是怎么检测一个字符的编码吗?对于这种情况,在php里,mb_string这个扩展中的mb_check_encoding提供了我们所需要的功能。 $str = mb_check_encoding($_GET['str'],'gbk') ? iconv('gbk',$_GET['str']) : $_GET['str']; 但这需要打开mb_string这个扩展,有些时候可能我们的生产服务器中没有打开这个扩展。对于这种情况,需要自己借助如下函数来判断编码。 以下函数非本人所写 代码如下:function isGb2312($string) { for($i=0; $i 127) { if( ($v >= 228) && ($v < = 233) ) { if( ($i+2) >= (strlen($string) - 1)) return true; $v1 = ord( $string[$i+1] ); $v2 = ord( $string[$i+2] ); if( ($v1 >= 128) && ($v1 < =191) && ($v2 >=128) && ($v2 < = 191) ) return false; else return true; } } } return true; } function isUtf8($string) { return preg_match('%^(?: [x09x0Ax0Dx20-x7E] # ASCII | [xC2-xDF][x80-xBF] # non-overlong 2-byte | xE0[xA0-xBF][x80-xBF] # excluding overlongs | [xE1-xECxEExEF][x80-xBF]{2} # straight 3-byte | xED[x80-x9F][x80-xBF] # excluding surrogates | xF0[x90-xBF][x80-xBF]{2} # planes 1-3 | [xF1-xF3][x80-xBF]{3} # planes 4-15 | xF4[x80-x8F][x80-xBF]{2} # plane 16 )*$%xs',$string); } 这里我们就可以使以上任何一个函数来实现编码的检测。并将其转换成指定的编码。 $str = isGb2312($_GET['str'],$_GET['str']) : $_GET['str']; (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
