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