首页 > 作文

PHP编码转换函数 自动转换字符集支持数组转换

更新时间:2023-04-06 10:53:28 阅读: 评论:0

复制代码 代码如下:

// 自动转换字符集 支持数组转换

functio苏醒李菲儿n auto_chart($fcontents, $from=’gbk’, $to=’utf-8′) {

$from = strtoupper($from) == ‘utf8’ ? ‘utf-8’ : $from;

$to = strto星期五的英语单词upper($to) == ̵蔡依林资料6;utf8’ ? ‘utf-8’ : $to;

if (strtoupper($from) === strtoupper($to) || empty($fcontents) || (is_scalar($fcontents) && !is_string($fcontents))) {

//如果编码相同或者非字符串标量则不转换

return $fcontents;

}

if (is_string($fcontents)) {

if (function_exists(‘mb_convert_encoding’)) {

return mb_convert_encoding($fcontents, $to, $from);

} elif (function_exists(‘iconv’)) {

return iconv($from, $to, $fcontents);

} el {

return $fcontents;

}

} elif (is_array($fcontents)) {

foreach ($fcontents as $key => $val) {

$_key = auto_chart($key, $from, $to);

$fcontents[$_key] = auto_chart($val, $from, $to);

if ($key != $_key)

unt($fcontents[$key]);

}

return $fcontents;

}

el {

return $fcontents;

}

}

当我们在接受未知客户端提交的数据,由于各客户端的编码不统一,但在我们的服务器端最终只能以一种编码方式来处理,这种情况下就会涉及到一个将接受到的字符转换为特定编码的问题。

这时可能会想到直接用iconv来进行转码,但我们知道,iconv这个函数需要提供的两个参数为输入编码和输出编码,而我们现在根本不知道接受的字符串是什么编码,如果这个时候能得到接收字符是什么编码就好了。

对于这样的问题,一般会有两种解决方案。

方案一

要客户端提交数据时,指定所提交的编码,这时就需要多给一个用来指定编码的变量。

$string = $_get[‘chart’] === ‘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这个扩展,有些时候可能我们的生产服务器中没有打开这个扩展。对于这空调除湿开多少度合适种情况,需要自己借助如下函数来判断编码。

以下函数非本人所写


复制代码 代码如下:

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 fal;

el

return 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’];

本文发布于:2023-04-06 10:53:26,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/c058309bc3d84db057865becc3430603.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP编码转换函数 自动转换字符集支持数组转换.doc

本文 PDF 下载地址:PHP编码转换函数 自动转换字符集支持数组转换.pdf

标签:客户端   代码   方案   函数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图