如何将欧元(€)符号从Windows-1252转换为UTF-8?

时间:2015-06-04 09:31:08

标签: php encoding utf-8 windows-1252

一个软件生成一个Windows-1252 XML文件,我想用PHP解析它,并以UTF8的形式发送数据库。

我尝试了很多解决方案,例如 iconv utf8_encode 功能,但没有结果。

它会显示€之类的内容,但不仅仅是 ...

我的XML文件是这样的:

<?xml version="1.0" encodoing="Windows-1252" standalone="yes"?>
    <node>The price is 12 &#128; !</node>

&#128; 似乎是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 个答案:

答案 0 :(得分:1)

如此Stack Overflow question所示,欧元符号将转换为latin-1 supplement euro character,而不是"proper" UTF-8 codepoint。解决方法是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 &#128; !</node>';

$doc = new DomDocument();
$doc->loadXML($xml);
$nodes = $doc->getElementsByTagName('node');
$node = iconv('Windows-1252', 'UTF-8', utf8_decode($nodes[0]->nodeValue));
echo $node;