私はこのプロジェクトに取り組んでおり、さまざまなソースからさまざまなXMLファイルを受け取ります。私のPHPスクリプトはそれらを読み取り、解析し、mysqlデータベースに保存する必要があります。
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コード:
$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";
コードの結果(Linux bashシェルの場合)はカーソルを上に移動してから、次のように出力します。bÃn--Rozb 741,85km; DÄ(カーソルの動きはもちろん、PHPによって出力される誤った文字に関連しています)
PHPはデータをUTF-8に変換して文字列パラメーターに格納すると思うので、mb_convert_encodingを使用してUTF-8からcp1250に変換すると正しい結果が表示されると思いましたが、そうではありません。また、他のすべてのソースと組み合わせることができる形式でデータを保存できるはずです。
エンコーディング/コードページについてはよくわかりません。これがおそらく正しく機能しない理由ですが、異なる言語のテキストをコピーして貼り付けた場合、たとえば新しいUltraEditファイルに貼り付けることができます。 、それらはすべて正しく表示されます。UltraEditはこれをどのように処理しますか?UTF-8を使用していますか(これは何でも表示できると思いますか?)
ソースのどのエンコーディングでも常に表示されるようにデータを変換するにはどうすればよいですか?