1

私はこのプロジェクトに取り組んでおり、さまざまなソースからさまざまな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を使用していますか(これは何でも表示できると思いますか?)

ソースのどのエンコーディングでも常に表示されるようにデータを変換するにはどうすればよいですか?

4

2 に答える 2

2

代わりにiconvを試してください:

$str = iconv('UTF-8', 'WINDOWS-1250', $str);
于 2011-02-10T16:16:39.850 に答える
0

問題は、入力ファイルの形式が正しくないことです。ìWindows-1250には文字(ラテン語の小文字Iと墓)はありません。ここを参照してください。

最も近い文字はU+00ED(LATIN SMALL LETTER I WITH ACUTE)です。

そのようなキャラクターがシェルで正しく表示されるという事実は、おそらく偶然です。

于 2011-02-10T16:17:27.460 に答える