ホームページ  >  記事  >  php教程  >  PHPで生成したXMLをFLASHで取得することで文字化けを根本的に解決

PHPで生成したXMLをFLASHで取得することで文字化けを根本的に解決

WBOY
WBOYオリジナル
2016-06-21 08:57:021213ブラウズ

信じられないほどの問題と戦うことを最も恐れない人、誰が最も優れた鼻を持っているかを見てみましょう。コーディングで障害に遭遇してから長い時間が経ちましたが、今日また小さなティーバッグに遭遇しました。PHP で生成されたものの、FLASH で取得した XML が文字化けしていました。

探索の末、ようやく解決しました。それを記録し、一般的な解決策も記録します。 XML<->FLASH の文字化けコードも発生した場合は、次のことをすぐに確認できます:
1. XML にまったく問題がないことが確認できた場合:
まず、flash は文字化けした XML を読み取り、静的属性 System.useCodepage
を含みます。 公式説明: 「外部テキスト ファイルを解釈するためにどのコード ページを使用するかを Flash Player に指示するブール値。」 デフォルトは false です。
UTF8 でエンコードされた外部テキスト ファイルを使用する場合、PHP100.com はそれを心配する必要はありません。UTF8 でエンコードされていないテキスト ファイルを使用し、テキスト内に中国語が表示される場合は、Flash が使用できるようにこれを true に設定する必要があります。文字化けせずに文字を読むことができます。
AS3 では、最初に flash.system.System をインポートしてから、System.useCodePage=true; を設定できます。
2. PHP に UTF-8 でエンコードされた XML を生成させたい:
XML に中国語の文字を含めるには、UTF-8 エンコーディングを使用するのが最善です。 DOM を使用して XML を作成する前に、 $dom_XML = new DomDocument('1.0','UTF-8'); として宣言します。2 番目のパラメータは、XML ドキュメントの宣言部分のエンコード値に対応します。ただし、これは宣言されたエンコーディングにすぎないことに注意してください。$dom_XML->saveXML(); を使用して実際に生成される XML ファイルは、PHP スクリプトのソース ファイルと同じエンコーディング形式です。つまり、「どのエンコーディングが PHP ですか?」は何のエンコードですか。」

3. XML ファイル宣言のエンコーディングは UTF-8 であり、フラッシュで useCodepage がどのような値に設定されていても、読み取り値は文字化けします このような状況に遭遇することがよくありますが、その理由は次のとおりです。宣言部分は UTF-8 ですが、ファイル自体は UTF-8 ではありません (私自身は ANSI エンコードされています、汗)。
これは深刻な問題を引き起こします。Firefox ブラウザは XML を正常に解釈できますが、IE (TT などの IE Core ブラウザを含む) では文字が間違っているというメッセージが表示され、Flash でも文字化けが表示されます。
この状況に対処するには 2 つの方法があります:
XML 宣言部分を GB2312 などの非 UTF-8 に変更し、FLASH useCodepage=true; を設定します。 XML をメモ帳で開き、「名前を付けて保存」コマンドを使用して UTF-8 として保存します
つまり、エンコード宣言はファイル自体のエンコードと一致し、名前と矛盾することはできません。

4. PHP ソース ファイルは UTF8 でエンコードされていません。FLASH が中国語の文字をサポートできるようにする XML を生成するにはどうすればよいですか?これが私が遭遇したものです:
PHP は ANSI で保存されており、DOM を使用して生成された XML は当然 ANSI です。PHP100.com でエンコードされた XML ファイルに中国語の文字が含まれている場合、エンコードが UTF-8 であると宣言されていても正しく読み取ることができません。 この前提のもと、FLASH で XML を文字化けせずに正しく読み取るには、エンコードを GB2312 に設定する必要があります。
しかし、PHP の DOM では、GB2312 を使用して漢字を書くことはできません (理解できません。アドバイスをお願いします)。 new DomDocument('1.0','GB2312'); の場合、XML の保存時に「conv エラーのため出力変換に失敗しました。バイト 0xCE 0xD2 0x5D 0x5D」などのエラーが発生します。つまり、私の ANSI PHP は、UTF-8 として宣言されているものの、実際には ANSI である XML ファイルしか生成できません。当然、このようなファイルは FLASH によって文字化けとして読み取られます (記事 3 を参照)。

私の解決策:
PHP が UTF-8 宣言を含む XML を生成した後、XML ファイルを開き、ヘッダー宣言を書き換えて UTF-8 を GB2312 に置き換えるステップが追加されます。ふふ、FLASHでもIEでもFFでも大丈夫ですよ!



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。