The one who is least afraid of fighting the unimaginable problems, let’s see who has the best nose. It’s been a long time since I encountered an obstacle in coding, but bkJia.com encountered another little teabag today—the XML generated by PHP was garbled when obtained using FLASH. Finally solved after exploration. Record it, and also record the general solution. If you also encounter XML<->FLASH garbled code, you can quickly check:
1. When you are sure there is absolutely nothing wrong with XML:
First of all, the garbled code when flash reads xml involves the static attribute attribute System.useCodepage
Official description: "A Boolean value that tells Flash Player which code page to use to interpret external text files." The default is false.
If we use UTF8-encoded external text files, bkJia.com does not need to worry about it. If we use non-UTF8-encoded text files and Chinese characters appear in the text, we need to set it to true to allow flash to read the characters without garbled characters.
In AS3, you can first import flash.system.System; and then set System.useCodePage=true;
2. Want PHP to generate UTF-8 encoded XML:
To have Chinese characters in XML, it is best to use UTF-8 encoding. Before using DOM to create XML, declare it as $dom_XML = new DomDocument('1.0','UTF-8'); the second parameter corresponds to the encoding value of the declaration part of the XML document. But note: this is only the declared encoding. The actual generated xml file using $dom_XML->saveXML(); is the same encoding format as the PHP script source file, that is, "What encoding is your PHP? The generated file is What encoding.”
3. The XML file declaration encoding is UTF-8. No matter what value useCodepage is set to in flash, the reading is still garbled
We often encounter this situation, usually because: although the declaration part is UTF-8, the file itself is not UTF-8 (I am ANSI encoded myself, sweat).
That will cause a serious problem: Firefox browser can interpret XML normally, but IE (including IE core browsers such as TT) prompts that there are wrong characters, and Flash also displays garbled characters!
There are two ways to handle this situation:
Change the XML declaration part to non-UTF-8, such as GB2312, and then set FLASH useCodepage=true;
Open the XML with Notepad and use the "Save As" command to save it as UTF-8
That is to say, the encoding declaration matches the encoding of the file itself, and cannot be inconsistent with the name.
4. The PHP source file is not UTF8 encoded. How to generate XML that allows FLASH to support Chinese characters? This is what I encountered:
PHP is saved in ANSI, and the XML generated using DOM is naturally ANSI. If the XML file encoded by bkJia.com contains Chinese characters, it cannot be read correctly even if the encoding is declared to be UTF-8.
Under this premise, if you want FLASH to correctly read XML without garbled characters, you must set the encoding to GB2312.
However, PHP's DOM cannot use GB2312 to write Chinese characters (I don't understand, please give me some advice)? If new DomDocument(’1.0′,’GB2312′); an error will occur when saving XML: “output conversion failed due to conv error, bytes 0xCE 0xD2 0×5D 0×5D” or the like. In other words, my ANSI PHP can only generate XML files that are declared as UTF-8 but are actually ANSI. Of course, such files will be read as garbled characters by FLASH (refer to Article 3).
My solution:
After PHP generates XML with UTF-8 declaration, a step is added: open the XML file and rewrite the header declaration to replace UTF-8 with GB2312. Hehe, FLASH, IE, and FF are all fine!