Определите кодировку и сделайте все UTF-8

Сначала необходимо определить, какая encodings кодировка была использована. При php.ini синтаксическом анализе RSS-каналов php-cli (возможно, через HTTP) следует utf8-decode считывать кодировку из параметра php-fpm charset тега Content-Type HTTP header field. Если его нет, прочтите php кодировку из атрибута encoding тега php XML processing instruction. Если он тоже отсутствует, use UTF-8 as defined in the specification.


Изменить Вот php5 что я, вероятно, сделал бы:

Я php-mail бы использовал cURL для отправки charset-table и получения ответа. Это позволяет encoding вам устанавливать определенные php-include поля заголовка, а также получать php5 заголовок ответа. После получения utf-8 ответа вы должны проанализировать utf-8 HTTP-ответ и разделить его php-include на заголовок и тело. Затем character-encoding заголовок должен содержать php поле заголовка Content-Type, которое php5 содержит тип MIME и (надеюсь) параметр php-cli charset с кодировкой / кодировкой. Если character-encoding нет, мы проанализируем XML php-include PI на наличие атрибута encoding и php-fpm получим оттуда кодировку. Если php-errors он также отсутствует, спецификации phtml XML определяют использование php5 UTF-8 в качестве кодировки.

$url = 'http://www.lr-online.de/storage/rss/rss/sport.xml';

$accept = array(
    'type' => array('application/rss+xml', 'application/xml', 'application/rdf+xml', 'text/xml'),
    'charset' => array_diff(mb_list_encodings(), array('pass', 'auto', 'wchar', 'byte2be', 'byte2le', 'byte4be', 'byte4le', 'BASE64', 'UUENCODE', 'HTML-ENTITIES', 'Quoted-Printable', '7bit', '8bit'))
);
$header = array(
    'Accept: '.implode(', ', $accept['type']),
    'Accept-Charset: '.implode(', ', $accept['charset']),
);
$encoding = null;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
$response = curl_exec($curl);
if (!$response) {
    // error fetching the response
} else {
    $offset = strpos($response, "\r\n\r\n");
    $header = substr($response, 0, $offset);
    if (!$header || !preg_match('/^Content-Type:\s+([^;]+)(?:;\s*charset=(.*))?/im', $header, $match)) {
        // error parsing the response
    } else {
        if (!in_array(strtolower($match[1]), array_map('strtolower', $accept['type']))) {
            // type not accepted
        }
        $encoding = trim($match[2], '"\'');
    }
    if (!$encoding) {
        $body = substr($response, $offset + 4);
        if (preg_match('/^<\?xml\s+version=(?:"[^"]*"|\'[^\']*\')\s+encoding=("[^"]*"|\'[^\']*\')/s', $body, $match)) {
            $encoding = trim($match[1], '"\'');
        }
    }
    if (!$encoding) {
        $encoding = 'utf-8';
    } else {
        if (!in_array($encoding, array_map('strtolower', $accept['charset']))) {
            // encoding not accepted
        }
        if ($encoding != 'utf-8') {
            $body = mb_convert_encoding($body, 'utf-8', $encoding);
        }
    }
    $simpleXML = simplexml_load_string($body, null, LIBXML_NOERROR);
    if (!$simpleXML) {
        // parse error
    } else {
        echo $simpleXML->asXML();
    }
}

php

encoding

utf-8

character-encoding

2022-11-15T22:02:55+00:00