我正在使用PHP文件来解析标题,描述和其他标签的不同网页。
这是我们的代码
if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])) {
$images = [];
$url = $_GET['req'];
$ext = ['.jpeg', 'jpg', 'png', 'bmp', 'ico'];
$doc = new DOMDocument('1.0','UTF-8');
$doc->loadHTMLFile($url);
$doc->encoding = 'UTF-8';
var_dump($doc);
$uri = $doc->documentURI;
$parse = parse_url($uri);
$host = $parse['host']; //hostname
$title = $doc->getElementsByTagName('title')->item(0); // title
$metas = $doc->getElementsByTagName('meta');
$details["title"] = $title->textContent;
$details["host"] = $host;
$details['uri'] = $uri;
foreach ($metas as $meta) {
...继续....
如果我们的URL文档包含任何特殊字符,则PHP无法识别它。它给了我们乱码。我在SO上经历了不同的问题,这似乎是UTF-8编码问题。但我已经在我的代码中给出了UTF 8。请帮帮我。
答案 0 :(得分:0)
请注意在构造函数中使用encoding参数。 这并不意味着所有数据都会在提供的编码中自动为您编码。选择除默认UTF-8以外的编码后,您需要自己执行此操作。请参阅有关如何正确使用其他编码的DOM函数说明...
构造函数示例清楚地表明版本和编码最终只在XML头中。
答案 1 :(得分:0)
IT看起来构造函数并不要求您传递第二个参数。您是否尝试过运行代码?我承认我对DOMDocument的理解有点差,但是如果它代表整个HTML文档,那么大多数网页浏览器都不会因为错过编码信息而过多地放弃他们,他们会做什么呢?他们最好的。