Hallo,
ich hab mich heute probiert, die SVG-Dateien zu prüfen (das klappt schonmal) und eine korrigierte Version zu speichern.
Leider geht beim Speichern die Formatierung verloren, also Carriage Return und Einschübe.
Zusätzlich sieht es so aus, als ob er die ersten zwei Zeilen vertauscht, also aus
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
wird
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<?xml version="1.0" encoding="iso-8859-1"?>
Zudem wird die Zeichnung im IE nicht angezeigt. (Wenn das Atttribut fehlt, dann werden "wenigstens" ein paar Ziffern angezeigt)
Hat jemand eine Idee?
Das Script sieht momentan wie folgt aus:
Das '@' vor dem LoadHTMLFile habe ich verwendet, da ansonsten die ganzen Tags der SVG-Datei als fehlerhaft angezeigt wurden, da ja kein HTML.
$verzeichnis = "./svgs";
if ( is_dir ( $verzeichnis )) {
if ( $handle = opendir($verzeichnis) ) {
while (($file = readdir($handle)) !== false) {
$typ = strtoupper(array_pop(explode(".",$file)));
if ($typ == "SVG") {
echo "Typ: $typ Datei: $file ";
$dom = new DOMDocument('1.0', 'iso-8859-1');
$dom->encoding = 'iso-8859-1';
$dom->validateOnParse = FALSE;
$dom->strictErrorChecking = false ;
$dom->preserveWhiteSpace = true;
$dom->resolveExternals = true;
$dom->formatOutput = true;
@$dom->loadHTMLFile($verzeichnis."/".$file);
$a_nodelist = $dom->getElementsByTagName('svg');
foreach ( $a_nodelist as $index => $node ) {
if ($node->hasAttributes()) {
$_attrlist = array();
foreach ($node->attributes as $attr) {
$_attrlist[$attr->nodeName] = $attr->nodeValue;
}
}
if (isset($_attrlist['xmlns'])) {
echo "OK <br/>";
} else {
echo "repariert <br/>";
$attr = $node->setAttribute("xmlns","http://www.w3.org/2000/svg");
$dom->saveHTMLFile($verzeichnis."/neu/".$file);
}
}
}
}
closedir($handle);
}
}