Chyba kodování při parsování XML

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Scorpio
Člen | 45
+
0
-

Zdravím,
mám dotaz, netýká se tak úplně nette. Mám v Nette 2.2.3 napsanou aplikaci kde používám parser XML. Vypadá nějak takto:

try {
                $dom = new \DOMDocument("1.0", "UTF-8");
                $dom->strictErrorChecking = false;
                $dom->validateOnParse = false;
                $dom->recover = true;
                $dom->loadXML(file_get_contents($file));
                $xml = simplexml_import_dom($dom);
                if ($xml === false) {
                    foreach (libxml_get_errors() as $error) {
                        $text[] = $error->message;
                    }
                    \Tracy\Debugger::log("libXML: " . implode(", ", $text), 'error');
                } else {
                    if ($subparam === false) {
                        $this->xml[$type] = $xml;
                    } else {
                        $this->xml[$type][$subparam] = $xml;
                    }
                    @unlink($file);
                }
            } catch (Exception $e) {
                \Tracy\Debugger::log("Exception: " . $e->getMessage(), 'error');
            }

Funguje parádně a i když je tam jednoduchá chyba dokáže ji vynechat. Avšak jeden z mých dodavatelů má XML v kódování Windows-1250 a čas od času tam zanese znak vchybném kodování (jak to opravdu nevím ale pravděpodobně vůbec nemaj ošetřený vstupy). Můj parser sice dokáže takový XML zpracovat ale jakmile dojde k chybě tak nepokračuje dál. Takže místo 10000 položek načte třeba 100 protože ve 100 je chyba.
Když spustím XML ve firefoxu tak ten ho nezobrazí a napíše, že tam je neplatný znak. Např:

￿NVIDIA Super Resolution technology

Takže má otázka zní je nějak možné odstranit neplatné znaky v kódování 1250 před tím než ho pošlu do XML čtečky? Pokud použiju Strings::fixEncoding() tak mi to zase veškerou diakritiku změní na ?.
Neřešil jste někdo už takový problém?

LeonardoCA
Člen | 296
+
0
-

nevim jestli si s tim poradi, ale zkusil bych http://php.net/…irstring.php