0

私は国際的な会社で働いているため、対応する言語がたくさんあります。一部の特殊文字に問題があります。

システムによって引き起こされる可能性のある他の問題を排除するために、スタンドアロンのテスト PHP ページを作成しました。

私が読んださまざまなページから、SimpleXMLがXMLをUTF-8として処理していることがわかりました。例:返された PHP SimpleXML 値には、ハイフンとアポストロフィの代わりに奇妙な文字が含まれています。

だから私はページの上部でそれをやった:

header("Content-type:text/html; charset=UTF-8");

それから私はこれをチェックしました:

print mb_internal_encoding();

これが正しい機能かどうかはわかりませんが、FF と Chome で ISO-8859-1 が得られました。

XML は次のようになります。

$xml = '<?xml version="1.0" encoding="ISO-8859-15"?>
<Tracking>
<File>
<FileNumber>çúé$`~  €   Š   š   Ž   ž   Œ   œ   Ÿ</FileNumber>
<OrigBranch>124</OrigBranch>
<Login></Login>
</File>
</Tracking>';

これはすべておかしいですが、必要なページについては、実際のページが実際にcronから実行されてXMLをMYSQL DBにインポートするため、ブラウザーでどのように印刷されるかはあまりわかりません。FFではこのように表示されますが

print $xml;
���$`~ � � � � � � � � � 124

次に、SimpleXML オブジェクトを作成します。

$parser = new SimpleXMLElement($xml);
print_r($parser);

これは出力します:

[File] => SimpleXMLElement Object
    (
        [FileNumber] => çúé$`~                           
        [OrigBranch] => 124
        [Login] => SimpleXMLElement Object
            (
            )

    )

print $xml; のおかしな文字についてはあまり心配していませんが、DB に挿入されている SimpleXMLElement オブジェクトの文字を修正する必要があります。SimpleXMLElement オブジェクトで「~」の後の文字が失われるのはなぜですか。ヘッダー関数呼び出しで文字セットを ISO-8859-15 に変更しようとしましたが、これは print $xml; につながるだけです。少し見栄えは良くなりましたが、'~' の後にまだ文字がありませんが、SimpleXMLElement で致命的なエラーが発生します:

'String could not be parsed as XML

XMLを解析する前に試しました:

$xml = mb_convert_encoding($xml, "ISO-8859-15");
$xml = iconv('UTF-8', 'ISO-8859-15//TRANSLIT', $xml)

しかし、これらも役に立ちませんでした。助言がありますか?

4

3 に答える 3