簡體   English   中英

使用Loadhtmlfile時使用PHP編碼的特殊字符

[英]Special characters encoding in PHP while using Loadhtmlfile

我正在使用一個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。 請幫我。

注意在構造函數中使用encoding參數。 這並不意味着所有數據都會以提供的編碼自動為您編碼。 一旦選擇了默認UTF-8以外的編碼,就需要自己做。 有關如何正確使用其他編碼的信息,請參閱有關DOM函數的注釋。

構造函數示例清楚地表明,版本和編碼僅以XML標頭結尾。

引薦來源網址http//php.net/manual/en/domdocument.construct.php

IT看起來構造函數不需要您將第二個參數傳遞給它。 您是否嘗試過在沒有該代碼的情況下運行代碼? 我承認我對DOMDocument的理解有點差,但是如果它代表一個完整的HTML文檔,那么大多數網絡瀏覽器對於丟失編碼信息不會有太多的猶豫,他們會盡力而為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM