一个乐于分享的博客
关注互联网折腾服务器分享码农的日常

PHP识别字符编码并自动转码为UTF-8

PHP识别字符编码并自动转码为UTF-8

最近在做PHP时遇到一个需求,要求服务器端根据传入的url返回页面的源代码。但是由于url是未知的,所以返回的源代码的编码也未知,如果没有做转码的话,遇到中文就会返回乱码。那么能不能让PHP自动判定内容的编码,并自动转换为UTF-8呢?

解决方案

既然有了需求,就要有对应的解决方案

  1. 根据URL获取源代码
  2. PHP判断返回源代码的编码格式
  3. 如果不是UTF-8编码,转码为UTF-8
  4. 返回转码后的结果

获取源代码

这里用file_get_contents进行获取

function getContent($url){
  //设置请求头
  $opts = array(
    'http'=>array(
      'method'=>"GET",
      'header'=>"Accept-language: zh-cn\r\n".
      "referer:$url\r\n",
      'timeout'=>"8",
    )
  );
  $context = stream_context_create($opts);
  //获取数据并返回
  return file_get_contents($url,false,$context);
}

自动转换格式

这里使用mb_detect_encoding进行字符编码判断。后边的数组列举了可能的编码,程序会依次判定,注意要将UTF-8放到最后。

$encode = mb_detect_encoding($html, array('ASCII','GB2312','GBK','UTF-8'));
if($encode != 'UTF-8'){
  $html = iconv( $encode,"utf-8",$html);
}
echo $html;

完整代码

<?php 
$url = $_GET['url']; 
function getContent($url)
{ 
    $opts = array( 'http'=>array(
          'method'=>"GET",
          'header'=>"Accept-language: zh-cn\r\n".
          "referer:$url\r\n",
          'timeout'=>"8",
        )
    );
    $context = stream_context_create($opts);
    return file_get_contents($url,false,$context);
}

$html = getContent($url);

$encode = mb_detect_encoding($html, array('ASCII','GB2312','GBK','UTF-8')); 
if($encode != 'UTF-8'){
    $html = iconv( $encode,"utf-8",$html);
}

echo $html;

转载务必注明出处:岩兔站 » PHP识别字符编码并自动转码为UTF-8
赞 (1) or 打赏

讨论区 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址