编程语言
首页 > 编程语言> > PHP简单HTML DOM解析器的字符编码问题

PHP简单HTML DOM解析器的字符编码问题

作者:互联网

我正在使用PHP Simple HTML DOM Parser http://simplehtmldom.sourceforge.net/从其他域获取页面标题,元描述和元标记等数据,然后将其插入数据库.

但我有一些编码问题.问题是我没有从那些不是英语的网站上得到正确的字符.

以下是代码:

<?php
require 'init.php';

$curl = new curl();
$html = new simple_html_dom();

$page = $_GET['page'];

$curl_output = $curl->getPage($page);

$html->load($curl_output['content']);
$meta_title = $html->find('title', 0)->innertext;

print $meta_title . "<hr />";

// print $html->plaintext . "<hr />";
?>

facebook.compage的输出

欢迎使用Facebook – 登录,注册或了解更多信息

amazon.cnpage的输出

亚马-Š-罒上è’ç‰å•†åŸŽï¼šè|ç½’è’,å°±æ¥Z.cn!

mail.rupage的输出

Mail.Ru:почÑ,а,поиÑквинÑ,ÐμрнÐμÑ,Ðμ,новоÑÑ,и,игрÑ<,раÐÐÐÐÐÐÐÑÑ ‡ÐμÐ½Ð¸Ñ 因此,字符未被正确编码. 任何人都可以帮助我如何解决这个问题,以便我可以将正确的数据添加到我的数据库中.

解决方法:

@deceze和@Shakti感谢您的帮助.

 1作为deceze(Handling Unicode Front to Back in a Web App)发布的文章链接,也值得阅读Understanding encoding

在阅读你的评论,回答当然这两篇文章后,我终于解决了我的问题.

我列出了迄今为止我为解决此问题所采取的步骤:

>添加标题(‘Content-Type:text / html; charset = utf-8’);在我的init.php文件的顶部,
>更改了我的数据库表字段的CHARACTER SET,它将这些值存储到UTF-8,
>将MySQL连接字符集设置为UTF-8 mysql_set_charset(‘utf8’,$connection_link_id);
>使用htmlentities()函数转换字符$meta_title = htmlentities(trim($meta_title_raw),ENT_QUOTES,’UTF-8′);

现在这个问题似乎已经解决了,但我仍然需要做以下事情来解决这个问题.

>从源$source_charset获取编码的字符集.
>如果字符串的编码已经不在同一编码中,请将其更改为UTF-8.为此,唯一可用的PHP函数是iconv().示例:iconv($source_charset,“UTF-8”,$meta_title_raw);

为了获得$source_charset,我可能不得不使用一些技巧或多重检查.就像检查标题和元标记等一样,我在Detect encoding找到了一个很好的答案

如果我的步骤有任何改进或任何错误,请告诉我.

标签:simple-html-dom,php,mysql,dom,curl
来源: https://codeday.me/bug/20191006/1863383.html