您好,欢迎访问一九零五行业门户网

php编码转换函数(自动转换字符集支持数组转换)

$val) {$_key = auto_charset($key, $from, $to);$fcontents[$_key] = auto_charset($val, $from, $to);if ($key != $_key)unset($fcontents[$key]);}return $fcontents;}else {return $fcontents;}}
复制代码
这时可能会想到直接用iconv来进行转码,但iconv这个函数需要提供的两个参数为输入编码和输出编码,而现在根本不知道接受的字符串是什么编码,如果此时能得到接收字符是什么编码就好了。对于这个问题,有以下两种方案供参考。
方案一要客户端提交数据时,指定所提交的编码,这时就需要多给一个用来指定编码的变量。$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','utf-8',$_get['str']) : $_get['str'];但这需要打开mb_string这个扩展,有些时候可能我们的生产服务器中没有打开这个扩展。对于这种情况,需要自己借助如下函数来判断编码。
= 228) && ($v {if( ($i+2) >= (strlen($string) - 1)) return true;$v1 = ord( $string[$i+1] );$v2 = ord( $string[$i+2] );if( ($v1 >= 128) && ($v1 =128) && ($v2 return false;elsereturn true;}}}return true;}function isutf8($string) {return preg_match('%^(?:[\x09\x0a\x0d\x20-\x7e] # ascii| [\xc2-\xdf][\x80-\xbf] # non-overlong 2-byte| \xe0[\xa0-\xbf][\x80-\xbf] # excluding overlongs| [\xe1-\xec\xee\xef][\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'],'gbk') ? iconv('gbk','utf-8',$_get['str']) : $_get['str'];
其它类似信息

推荐信息