私はさまざまなソースからさまざまなXMLファイルを受け取るこのプロジェクトで取り組んでいます。私のPHPスクリプトはそれらを読んで解析し、mysqlデータベースに格納する必要があります。PHP:単純なXMLと異なるコードページとデータの正確な取得
XMLファイルを解析するには、PHPでSimpleXMLElementクラスを使用します。ベルギーからUTF-8エンコーディング、ドイツからiso-8859-1エンコーディング、チェコ共和国からcp1250などのファイルを受け取ります。
xml-dataをSimpleXMLElementに渡してこのオブジェクトでasXML()を実行すると、元のxmlファイルと同じようにxmlデータが正しく表示されます。 フィールドをPHP変数に割り当ててこの変数を画面に表示しようとすると、テキストが壊れて見えますが、もちろんmysqlデータベースに挿入すると壊れてしまいます。
例:
XML:
<?xml version="1.0" encoding="cp1250"?>
...
<name>Labe Dìèín - Rozb 741,85km ; Dìèín - Rozb 741,85km </name>
...
PHPコード:(Linuxのbashシェル上の)コードの
$sxml = file_get_contents("test.xml");
$xml = new SimpleXMLElement($sxml);
//echo $xml->asXML() . "\n"; // content will show up correctly in the shell
$name = (string)$xml->ftm->fairway_section->geo_object->name;
echo $name . "\n";
結果は上向きカーソルを移動した後、印刷:BAN - Rozb 741,85km;私はPHPがそのデータを文字列パラメータに格納するためにそのデータをUTF-8に変換すると思うので、mb_convert_encodingを使用していると仮定しています(PHPで印刷された間違った文字にカーソルの動きが関係しています) UTF-8からcp1250への変換は正しい結果を示しますが、そうではありません。また、他のすべてのソースと組み合わせ可能な形式でデータを格納できるはずです。
私はエンコード/コードページについてよく分かりませんが、これはおそらく私が正しく動作するようにはできませんが、私が知っていることは、例えば、異なる言語のテキストを新しいUltraEditファイル、それらのすべてが正しく表示されます。 UltraEditはどのようにこれを処理しますか?
ソース上のどのようなエンコーディングでも、常にデータが表示されるようにデータを変換するにはどうすればよいですか?UTF-8を使用していますか?代わりに
はい、これはトリックです。違いはなんですか? – scippie