PHP DomDocument - 为什么将短划线“ - ”转换为 -

时间:2013-11-13 16:57:27

标签: php xml utf-8 domdocument

我正在使用DOMDocument来提取一些段落。

以下是我正在进行的初始htm文件的示例:

<html>
    <head>
        <title>Toxins</title>
    </head>

    <body>
        <p class=8reference><span>1.</span><span>Sivonen, K.; Jones, G. Cyanobacterial Toxins. In <i>Toxic Cyanobacteria in Water. A Guide to Their Public Health Consequences, Monitoring and Management</i>; Chorus, I., Bartram, J., Eds.; E. and F.N. Spon: London, UK, 1999; pp. 41–111.</span></p>
    </body>
</html>

我在做的时候:

$dom_input = new \DOMDocument("1.0","UTF-8");
$dom_input->encoding = "UTF-8";
$dom_input->formatOutput = true;
$dom_input->loadHTMLFile($manuscript->getUploadRootDir().$manuscript->getFileName());

$paragraphs = $dom_input->getElementsByTagName('p');

foreach ($paragraphs as $paragraph) {
    if($paragraph->getAttribute('class') == "8reference") {
        var_dump($paragraph->nodeValue);
    }
}

“pp.41-111”中的破折号转换为

pp. 41–111

知道为什么以及如何修复它以获得utf8 unicode值?

提前谢谢。

2 个答案:

答案 0 :(得分:3)

在我看来数据是正确的,你只是错误地显示它。

您输出的是UTF-8吗?

é+是经典的“显示UTF-8编码数据,好像它不是UTF-8。”

E.g。 如果您要输出到Web浏览器,请尝试使用元标记设置字符集。 E.g。

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

如果您需要输出UTF-8以外的其他内容,则需要先转换为替代字符集。

答案 1 :(得分:1)

使用PHP fputcsv()生成CSV文件时。在将数据插入fputcsv()

之前使用它
$data = mb_convert_encoding($data, 'cp1252', 'utf-8');
fputcsv($file, $data);

这肯定会在生成CSV时停止将破折号转换为â€"