gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP编码转换函数 自动转换字符集支持数组转换由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

代码如下

// 自动转换字符集 支持数组转换  function auto_charset($fContents, $from='gbk', $to='utf-8') {  $from = strtoupper($from) == 'UTF8' ? 'utf-8' : $from;  $to = strtoupper($to) == '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);  } elseif (function_exists('iconv')) {  return iconv($from, $to, $fContents);  } else {  return $fContents;  }  } elseif (is_array($fContents)) {  foreach ($fContents as $key => $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这个扩展,有些时候可能我们的生产服务器中没有打开这个扩展。对于这种情况,需要自己借助如下函数来判断编码。  以下函数非本人所写  。

复制代码代码如下

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('%^(?:  [\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'],

最后此篇关于PHP编码转换函数 自动转换字符集支持数组转换的文章就讲到这里了,如果你想了解更多关于PHP编码转换函数 自动转换字符集支持数组转换的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com