我使用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.com
页
Welcome to Facebook — Log in, sign up or learn more
amazon.cn
页
亚马逊-网上è´ç‰©å•†åŸŽï¼šè¦ç½‘è´, å°±æ¥Z.cn!
mail.ru
页
Mail.Ru: почта, поиÑк в интернете, новоÑти, игры, развлечениÑ
因此,字符编码不正确。
任何人都可以帮我解决这个问题,以便我可以将正确的数据添加到我的数据库中。
答案 0 :(得分:9)
@deceze和@Shakti感谢您的帮助。
对于deceze(Handling Unicode Front to Back in a Web App)发布的文章链接,+1,还值得一读Understanding encoding
在阅读你的评论,回答当然这两篇文章之后,我终于解决了我的问题。
我列出了目前为止解决此问题的步骤:
header('Content-Type: text/html; charset=utf-8');
mysql_set_charset('utf8', $connection_link_id);
$meta_title = htmlentities(trim($meta_title_raw), ENT_QUOTES, 'UTF-8');
现在这个问题似乎已经解决了,但我仍然需要做以下事情来解决这个问题。
$source_charset
获取已编码的字符集。iconv()
。示例:iconv($source_charset, "UTF-8", $meta_title_raw);
获取$source_charset
我可能需要使用一些技巧或多重检查。就像检查标题和元标记等一样。我在Detect encoding
如果我的步骤有任何改进或任何错误,请告诉我。
答案 1 :(得分:2)
如果我将浏览器编码切换为UTF-8,则可以正常工作。
因此,您只是没有设置正确的HTTP标头来指定您的文档是UTF-8编码的,而浏览器正在以其他编码方式解释它。使用:
header('Content-Type: text/html; charset=utf-8');
答案 2 :(得分:0)
我对罗马尼亚字符有同样的问题。在我使用
之前没有任何效果header('Content-Type: text/html; charset=ISO-8859-2');
ISO-8859-2是东欧字母的字符集。因此,请为您的语言找到正确的字符集,并在标题中使用它。