我采集这个网址内容:http://news.ifeng.com/photo/hdnews/list_0/0.shtml
原来是utf-8的,要把它转成gb2312。找很多方法都不行,怎么回事呢?
用iconv \ mb_convert_encoding都不行。
用别人的函数,也不行:
function GetGB2312String($in_charset, $out_charset, $inStr)
{
$tostr = "";
for($i=0;$i<strlen($inStr);$i++)
{
$curbin = ord(substr($inStr,$i,1));
if($curbin < 0x80)
{
$tostr .= substr($inStr,$i,1);
}elseif($curbin < bindec("11000000")){
$str = substr($inStr,$i,1);
$tostr .= "&#".ord($str).";";
}elseif($curbin < bindec("11100000")){
$str = substr($inStr,$i,2);
$tostr .= "&#".$this->GetUnicodeChar($str).";";
$i += 1;
}elseif($curbin < bindec("11110000")){
$str = substr($inStr,$i,3);
$gstr= iconv($in_charset,$out_charset,$str);
if(!$gstr)
{
$tostr .= "&#".$this->GetUnicodeChar($str).";";
}else{
$tostr .= $gstr;
}
$i += 2;
}elseif($curbin < bindec("11111000")){
$str = substr($inStr,$i,4);
$tostr .= "&#".$this->GetUnicodeChar($str).";";
 
$i += 3;
}elseif($curbin < bindec("11111100")){
$str = substr($inStr,$i,5);
$tostr .= "&#".$this->GetUnicodeChar($str).";";
$i += 4;
}else{
$str = substr($inStr,$i,6);
$tostr .= "&#".$this->GetUnicodeChar($str).";";
$i += 5;
}
}
return $tostr;
}//end function
求高手呀。谢谢了...

解决方案 »

  1.   

    $s = file_get_contents('http://news.ifeng.com/photo/hdnews/list_0/0.shtml');
    echo iconv('utf-8', 'gbk', strip_tags($s));没有问题呀
      

  2.   

    楼上的,你这是去掉html代码了,链接也去掉了,只有文本了。
    我是需要html代码一起的。
      

  3.   

    那只是为了检验编码转换是否正确,html代码是不需要转码的
      

  4.   

    这也是个方法,呵呵。先通过html代码截取内容后,再转码。
    谢谢xuzuning!