Drexel
2005-07-18, 14:00:36
Hallo,
ich habe hier folgendes Problem: Ich habe hier HTML-Dateien, in denen Umlaute (ä,ü,ö) auch wirklich als Umlaute geschrieben sind und nicht als HTML-Entitiy (ä ü ö ). Das wollte ich jetzt jetzt mit einem kleinen PHP-Script über das CLI eben korrigieren (Ich weiss, dass PHP dafür evtl nicht die optimalste Sprache ist, aber es ist die einzige, die ich soweit behersche :) ). Das Script läuft unter Windows XP und sieht so aus:
<?php
function getEnding ($filename)
{
if (substr ($filename, 0, 1) == ".")
{
$filename = (substr ($filename, 1, strlen($filename)));
}
$endingcopy=$filename;
$ending = stristr ($filename, ".");
if ($ending != "")
{
$ending = getEnding ($ending);
}
else
{
$ending=$endingcopy;
}
return $ending;
}
$handle=opendir ("d:\\verzeichnis");
while ($file = readdir ($handle))
{
if ($file != "." && $file != "..")
{
$ending = getEnding($file);
if ($ending == "shtml")
{
$filehandlerread = fopen ("d:\\verzeichnis\\" . $file, "rb");
$filehandlerwrite = fopen ("d:\\verzeichnisneu\\" . $file, "ab");
while (!feof($filehandlerread))
{
$line = fgets ($filehandlerread);
echo $line . " -> ";
$line = str_replace ("ä", "ä", $line);
$line = str_replace ("ö", "ö", $line);
$line = str_replace ("ü", "ü", $line);
$line = str_replace ("Ä", "Ä", $line);
$line = str_replace ("Ö", "Ö", $line);
$line = str_replace ("Ü", "Ü", $line);
echo $line . "\n";
fputs ( $filehandlerwrite, $line);
}
fclose ($filehandlerread);
fclose ($filehandlerwrite);
}
}
}
closedir($handle);
?>
Die Funktion getEnding() liefert die Dateiendung der aktuellen Datei zurück, dann wird der Inhalt aller .shtml-Dateien zeilenweise eingelesen, die Umlaute sollten eigentlich ersetzt werden und die Dateien werden wieder zeilenweise in ein neues Verzeichnis geschrieben.
Das ganze funktioniert aber irgendwie wegen der Kodierung nicht, wenn ich mir die Ausgabe auf der Kommandozeile ansehe, werden statt ä ö ü auch andere grafische Zeichen ausgegeben und deswegen werden die Zeichen durch str_replace auch nicht gefunden.
Kann mir jemand sagen, wie ich dieses Problem lösen kann? Ich habe es schon über htmlentities() und recode_string() probiert, wobei die erste Funktion keine Lösung brachte und die zweite ein "call to undefined function" brachte.
ich habe hier folgendes Problem: Ich habe hier HTML-Dateien, in denen Umlaute (ä,ü,ö) auch wirklich als Umlaute geschrieben sind und nicht als HTML-Entitiy (ä ü ö ). Das wollte ich jetzt jetzt mit einem kleinen PHP-Script über das CLI eben korrigieren (Ich weiss, dass PHP dafür evtl nicht die optimalste Sprache ist, aber es ist die einzige, die ich soweit behersche :) ). Das Script läuft unter Windows XP und sieht so aus:
<?php
function getEnding ($filename)
{
if (substr ($filename, 0, 1) == ".")
{
$filename = (substr ($filename, 1, strlen($filename)));
}
$endingcopy=$filename;
$ending = stristr ($filename, ".");
if ($ending != "")
{
$ending = getEnding ($ending);
}
else
{
$ending=$endingcopy;
}
return $ending;
}
$handle=opendir ("d:\\verzeichnis");
while ($file = readdir ($handle))
{
if ($file != "." && $file != "..")
{
$ending = getEnding($file);
if ($ending == "shtml")
{
$filehandlerread = fopen ("d:\\verzeichnis\\" . $file, "rb");
$filehandlerwrite = fopen ("d:\\verzeichnisneu\\" . $file, "ab");
while (!feof($filehandlerread))
{
$line = fgets ($filehandlerread);
echo $line . " -> ";
$line = str_replace ("ä", "ä", $line);
$line = str_replace ("ö", "ö", $line);
$line = str_replace ("ü", "ü", $line);
$line = str_replace ("Ä", "Ä", $line);
$line = str_replace ("Ö", "Ö", $line);
$line = str_replace ("Ü", "Ü", $line);
echo $line . "\n";
fputs ( $filehandlerwrite, $line);
}
fclose ($filehandlerread);
fclose ($filehandlerwrite);
}
}
}
closedir($handle);
?>
Die Funktion getEnding() liefert die Dateiendung der aktuellen Datei zurück, dann wird der Inhalt aller .shtml-Dateien zeilenweise eingelesen, die Umlaute sollten eigentlich ersetzt werden und die Dateien werden wieder zeilenweise in ein neues Verzeichnis geschrieben.
Das ganze funktioniert aber irgendwie wegen der Kodierung nicht, wenn ich mir die Ausgabe auf der Kommandozeile ansehe, werden statt ä ö ü auch andere grafische Zeichen ausgegeben und deswegen werden die Zeichen durch str_replace auch nicht gefunden.
Kann mir jemand sagen, wie ich dieses Problem lösen kann? Ich habe es schon über htmlentities() und recode_string() probiert, wobei die erste Funktion keine Lösung brachte und die zweite ein "call to undefined function" brachte.