2009-06-24 29 views
4

私は以下のXMLコードを持っています。私のXMLが壊れる原因は何ですか?

<firstname> 
<default length="6">Örwin</default> 
<short>Örwin</short> 
<shorter>Örwin</shorter> 
<shortest>�.</shortest> 
</firstname> 

なぜ「最短」ノードの内容が中断しますか?退屈なinsteadの代わりに、単純な "Ö"でなければなりません。 XMLはUTF-8でエンコードされ、そのノードの出力を処理する関数も "short"と "short"の内容を書き込みます。 「Ö」がはっきりと見える場所。

+0

。私は$ firstname {0}を使ってファーストネームの最初の文字を抽出します。 UTF-8文字列で問題が発生していますか? – individual8

+2

PHPスクリプトで間違った内部エンコーディングを使用したようです。 firstnameの最初の文字を取得するためにmb_substr($ firstname、0,1、 'UTF-8')に変更しました。 – individual8

答えて

17

私の推測では、XMLはであり、正しくはのUTF-8がエンコードされていないと推測されます。生ファイルの<shortest>要素の中にバイトのを表示してください...あなたはそれらが有効にエンコードされた文字でないことがわかります。あなたが有効な入力からこのXMLを生成する短いしかし完全なプログラムを表示することができれば、それは非常に役に立ちます。 (好ましくはどのプラットフォームであるかを言ってください。)

EDIT:このファイルでは何か異常が起きています。

短い:C3 96 72 77 69 63

最短:ここで六角 "短い" の値と "最短" の値であるEF BF BD 2E

すぐ "C3 96" が有効ですU + 00D6のためのUTF-8エンコーディング。これはあなたが望むように "分音符号のラテン大文字O"です。

しかし、EF BF BDはU + FFFDのUTF-8エンコーディングで、「置換文字」です。間違いなくではなく、あなたが望むものです。 (2EはASCIIドットだけです)

これは実際には有効なUTF-8ですが、必要な文字は含まれていません。繰り返しますが、ファイルを作成した内容を調べる必要があります。

+1

あなたは学校でタイピングレッスンを受けましたか? :) – kemiller2002

+1

あなたはすぐにtooooooooooooooです – rahul

+0

こんにちはジョン、ファイル(Firefoxから保存されています):http://clipboard.i8network.de/ged2xml.xml このXMLは、Linux環境でPHPのSimpleXMLによって生成されます。 – individual8

-3

XMLはタグ内の要素を解析します。要素には入れ子要素を含めることができるためです。したがって、 "ö"は解析を中断する可能性があります。

CDATAタグ、例えば、内部のデータを入れてください:たぶん問題は、私は持つ単一の「O」を得る方法であるhttp://www.w3schools.com/XML/xml_cdata.asp

+0

私はそれをすでに考えていました。しかし、なぜ他のウムラウトは壊れないのですか? – individual8

関連する問題