繁体   English   中英

UTF-8 编码字符在 PHP 中显示为乱码

[英]UTF-8 encoded characters show as gibberish in PHP

我正在尝试打印从 URL 获取的特定URL文档的所有<p>元素。 HTML 文档使用 UTF-8 编码

这是我的代码:

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    header('Content-Type: text/plain; charset=utf-8');
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: POST, GET, OPTIONS');

    $url = "https://www.sangbadpratidin.in/kolkata/ispat-express-met-an-accident-near-howrah-junction/#.Y7qC6YFeT80.whatsapp";

    $user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"; 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL,$url);
    $html=curl_exec($ch);

    if (!curl_errno($ch)) {
        $resultStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($resultStatus == 200) {
            @$DOM = new DOMDocument;
            @$DOM->loadHTML($html);
            
            $bodies = $DOM->getElementsByTagName('p');
            foreach($bodies as $body){
                $para = $body->nodeValue;
                echo $para;
            }
        }
    }
?>

HTML 文档充满了孟加拉语字符,当我尝试打印这些值时,打印出来的是:

সà§à¦¬à§à¦°à¦¤ বি ¦°à§à¦à¦à¦¨à¦¾à¦° à¦à¦¬à¦²à§ à¦à§à...

为什么我收不到原文? 请帮我

编辑:我刚刚测试了它,是的,这修复了它:) 在https 上看到它://dh.ratma.net/test/test2.php

DOMDocument 的已知问题没有意识到它的 UTF-8,并且默认使用一些可怕的 windows-1252 编码,并继续破坏实际的 UTF-8 多字节字符。 运气好的话,替换

@$DOM->loadHTML($html);

@$DOM->loadHTML('<?xml encoding="UTF-8">' . $html);

应该修复它。

$DOM->loadHTML($html)更改为$DOM->loadHTML(mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8"))似乎可以解决问题。

来源: PHP DOMDocument loadHTML 未正确编码 UTF-8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM