Программное обеспечение генерирует мне XML файл Windows-1252, и я хотел бы проанализировать его на PHP и отправить данные в моей базе данных в UTF8.
Я пробовал много решений, таких как iconv или utf8_encode, но никакого результата.
Он показывает такие вещи, как €
, но не только €
...
Мой XML файл выглядит так:
<?xml version="1.0" encodoing="Windows-1252" standalone="yes"?>
<node>The price is 12 € !</node>
€
представляется кодом € (евро) в Windows-1252.
Я пробовал эти функции:
<!doctype html>
<html lang='fr'>
<head>
<meta charset='UTF-8'>
</head>
<body>
<?php
// XML Loading in DOM Document
// Parsing XML Node
/* Not working */
$node = iconv('Windows-1252', 'UTF-8', $nodeValue);
/* Not working */
$node = utf8_encode($nodeValue);
?>
</body>
</html>
Как показано в этом вопросе о переполнении стека, символ евро преобразуется в символ евро- латинского-1, а не "правильный" код UTF-8. utf8_decode
для него является utf8_decode
а затем снова "перекодировать": $ node = iconv ("Windows-1252", "UTF-8", utf8_decode ($ node));
Так что пример кода, который работает:
<?php
$xml = '<?xml version="1.0" encoding="Windows-1252" standalone="yes"?>
<node>The price is 12 € !</node>';
$doc = new DomDocument();
$doc->loadXML($xml);
$nodes = $doc->getElementsByTagName('node');
$node = iconv('Windows-1252', 'UTF-8', utf8_decode($nodes[0]->nodeValue));
echo $node;
€
?