0

XML ドキュメントを解析し、アイテムの属性を表示する単純な PHP スクリプトがあります (属性はロシア語で、XML ファイルは「utf-8」文字セットを使用します)。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
    //header('Content-Type: text/html; charset=utf-8');
    $xml=simplexml_load_file('output.xml');
    echo $xml['moves'];
?>
</body>
</html>

私のXML:

<?xml version="1.0" encoding="UTF-8"?>
<game moves="Папа"> 
<a attr="2">123</a>
</game> 

このコードを使用すると、「Папа」ロシア語テキストの代わりに「Папа」しか表示されません。しかし、すべての HTML を削除し、header() PHP メソッドで charset を設定すると、正しく動作します! どうすれば修正できますか?

4

2 に答える 2

0

不明な点がある場合は、常に再確認する必要があります。それをしましょう。

まず、XML ファイルが実際にUTF-8 でエンコードされているかどうかを確認します。

次に、生成した HTML が実際に UTF-8 でエンコードされていることを最後に確認します。

これら2つのチェックを使用した上記の例を次に示します。

<?php
ob_start();
?>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
    <body>
    <?php
    $buffer = file_get_contents('output.xml');
    if (!preg_match('//u', $buffer)) {
        throw new Exception("XML file is not UTF-8 encoded!");
    }

    $xml = simplexml_load_string($buffer);
    echo $xml['moves'];
    ?>
    </body>
    </html>
<?php
$buffer = ob_get_clean();
if (!preg_match('//u', $buffer)) {
    throw new Exception("HTML is not UTF-8 encoded!");
}
?>
于 2013-03-09T13:27:00.583 に答える
0

オーサリング ドキュメントが HTML または XHTML の場合、Doctype 宣言を追加することが重要です。それはあなたの問題を解決するかもしれません

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
于 2013-03-09T13:13:03.543 に答える