使用Loadhtmlfile时在PHP中编码的特殊字符

时间:2014-09-07 15:09:33

标签: php utf-8

我正在使用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。请帮帮我。

2 个答案:

答案 0 :(得分:0)

请注意在构造函数中使用encoding参数。 这并不意味着所有数据都会在提供的编码中自动为您编码。选择除默认UTF-8以外的编码后,您需要自己执行此操作。请参阅有关如何正确使用其他编码的DOM函数说明...

构造函数示例清楚地表明版本和编码最终只在XML头中。

推荐人:http://php.net/manual/en/domdocument.construct.php

答案 1 :(得分:0)

IT看起来构造函数并不要求您传递第二个参数。您是否尝试过运行代码?我承认我对DOMDocument的理解有点差,但是如果它代表整个HTML文档,那么大多数网页浏览器都不会因为错过编码信息而过多地放弃他们,他们会做什么呢?他们最好的。