用php 的DOM对象的loadhtml 方法处理中文网页,得到的是乱码

suprun 2008-04-19 11:53:23
用php 的DOM对象的loadhtml 方法处理中文网页,得到的是乱码,谁能替我解决这个问题?

具体来说,我知道loadhtml 方法用的是utf-8编码形式,但无论是使用这个函数前用bm_convert_encoding处理,还是之后处理,输出的均是乱码,问题无法解决。

另外,若将浏览器的编码改成utf-8确能正确显示中文。这说明loadhtml 确实以utf-8处理中文内容,而我把处理后的内容用bm_convert_encoding($html,'utf-8','gb2312')处理,浏览器用gb2312显示却不成功,说明并没有转化成功,这是为什么?
...全文
269 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ohmygirl 2011-10-17
  • 打赏
  • 举报
回复
挖坟贴。。。囧了个囧
life169 2011-10-17
  • 打赏
  • 举报
回复
header("Content-type: text/html; charset=utf-8");

<?php
header("Content-type: text/html; charset=utf-8");
$myhtml=file("http://www.baidu.com");
$myhtml=join('',$myhtml);

$doc = new DOMDocument();
@$doc->loadHTML($myhtml);

$tags = $doc->getElementsByTagName('a');

foreach ($tags as $tag)
{

$html.='<a href='.$tag->getAttribute('href').'>'.$tag->childNodes->item(0)->nodeValue.'</a><br>';
}

echo $doc->encoding; //输出 gb2312 ,浏览器却显示乱码!(用gb2312编码的) 改成utf-8编码时显示正常。
?>
life169 2011-10-17
  • 打赏
  • 举报
回复
统一编码嘛

如果你的网页的编码是 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
那么采集过来的内容就需要转码:mb_convert_encoding($html,'gb2312','utf-8')

如果你的网页的编码是 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
那就不需要转码了,采集过来的内容可以直接显示。


<?php
header("Content-type: text/html; charset=utf-8");
$myhtml=file("http://www.baidu.com");
$myhtml=join('',$myhtml);

$doc = new DOMDocument();
@$doc->loadHTML($myhtml);

$tags = $doc->getElementsByTagName('a');

foreach ($tags as $tag)
{

$html.='<a href='.$tag->getAttribute('href').'>'.$tag->childNodes->item(0)->nodeValue.'</a><br>';
}

echo $doc->encoding; //输出 gb2312 ,浏览器却显示乱码!(用gb2312编码的) 改成utf-8编码时显示正常。
?>
gaoming13 2011-10-16
  • 打赏
  • 举报
回复
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
gaoming13 2011-10-16
  • 打赏
  • 举报
回复
将网页的编码改为 gb2312就OK了!!
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
关注 接分
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
不知,帮顶
beeqee 2008-04-20
  • 打赏
  • 举报
回复
string iconv ( string in_charset, string out_charset, string str )
suprun 2008-04-20
  • 打赏
  • 举报
回复
一楼的方法不行,bm_convert_encoding 也不行啊。php/manual 上也没说什么有用的东西好像,倒是有人说是bug。有高手能搞定它啊?
suprun 2008-04-20
  • 打赏
  • 举报
回复
<?php

$myhtml=file("http://www.baidu.com");
$myhtml=join('',$myhtml);

$doc = new DOMDocument();
@$doc->loadHTML($myhtml);

$tags = $doc->getElementsByTagName('a');

foreach ($tags as $tag)
{

$html.='<a href='.$tag->getAttribute('href').'>'.$tag->childNodes->item(0)->nodeValue.'</a><br>';
}

echo $doc->encoding; //输出 gb2312 ,浏览器却显示乱码!(用gb2312编码的) 改成utf-8编码时显示正常。
?>

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧