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

使用Loadhtmlfile时PHP中的特殊字符编码,php,utf-8,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');

我使用一个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编码问题。但是我已经在代码中给出了UTF8。请帮助我。

注意在构造函数中使用编码参数。 这并不意味着所有数据都会自动按照提供的编码方式进行编码。一旦选择了默认UTF-8以外的编码,您就需要自己完成这项工作。请参阅DOM函数中有关如何正确使用其他编码的说明

构造函数示例清楚地表明,版本和编码只在XML头中结束


referer:

构造函数似乎不需要您传递第二个参数。你有没有试过在没有这个的情况下运行你的代码?我承认我对DOMDocument的理解有点差,但如果它代表了整个HTML文档,那么大多数web浏览器不会因为丢失编码信息而发出太多的嘘声,他们会尽最大努力