Probleme mit PHP-Kopierscript

  • Themenstarter Themenstarter BlackPanter
  • Beginndatum Beginndatum
B

BlackPanter

Guest
Konnichi wa,

ich bin dabei mir ein Script zu Schreiben das mir eine Websie unabhaengig ihres Umfangs in Smarty-Form kopieren soll.

Jetzt bin ich auf 3 fuer mich nicht loesbare Probleme gestossen:

1. Die japanischen Zeichen werden mir nicht korrekt in die Datei geschrieben. Wenn ich jedoch mit echo ausgeben lasse, was er mir reinschreiben soll, wird es mir korrekt angezeigt.

2. Der japanische Teil der Website wird zum Teil gar nicht oder nur zum Teil in die Datei geschrieben.

3. Zwischen den einzelnen Teilen des Quelcodes, in der neuen Datei, haette ich gerne einen Zeilenumbruch. Wenn ich es mit '\r\n' oder nur '\n' versuche wird mir das einfach mit in den Quelcode geschrieben.

Der Code sieht folgendermassen jetzt aus:
PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php

//HTML-Dateien in einem Ordner in den Array $files_convert speichern.
function get_dir($par_dir, $ebene){
$files_convert = array();
    if ($handle = opendir($par_dir)){
        while (false != ($file = readdir($handle))) {
            if($file != '.' && $file != '..') {
                $path_parts = pathinfo($file);
                                
                                        if(is_dir($par_dir."/".$file)){
                                                //echo $ebene."<b>".$file."</b><br>\n";
                                                get_dir($par_dir."/".$file , $ebene."   ");
                                        }else {
                                                if($path_parts["extension"]=="html"){
                                                        $path = $par_dir."/".$file;
                                                        //echo $ebene."<a href='".$par_dir."/".$file."'>".$par_dir."/".$file."</a><br>\n";
                                                        array_push($files_convert, $path);
                                                }
                                        }
                        }
        }
        closedir($handle);
    }
        
        //Fuer jedes Element in $files_convert
        foreach ($files_convert as $value){
                $path = pathinfo($value);
                $tmp_dir = substr($path['basename'], 0, -5); //Dateinamen ohne Endung
                $file_dir = substr($value, strpos($value, "/")+1, strpos($value, "/", 3)-1); //neuer Speicherort
                $new_file_dir = "newtest/".$file_dir;
                $dir = $value;
                $site = $tmp_dir.'.php'; //Daeiname mit PHP-Endung
                
                        // Inhalt von der Seite einlesen
                        //$array = file($value);
                        
                        // Den Array von $array in eine String $string umwandeln
                        //$string = implode("", $array);
                        
                        $handle = fopen ($value, "rb");
                        $string = fread ($handle, utf8_encode(filesize ($value)));
                        fclose ($handle);
                        
                        // Offset auf Start setzen
                        $offset=0;
                        
                        //$handle_dir = fopen($new_file_dir, "w+b");
                        $handle_filedir = fopen($new_file_dir.$site, "w+b");
                        
                        // Ordner erstellen wenn noch ncih vorhanden
                        if (! is_dir($new_file_dir)){
                                mkdir($new_file_dir, 0777, true);
                        }
                        
                        //<title> auslesen und in Datei schreiben
                        //while(strpos($string,'<title>', offset) !==false){
                                $anfangtitle=strpos($string,'<title>', $offset)+62;
                                $endtitle=strpos($string,'</title>', $offset)-8;
                                
                                $tmp_title=substr($string, $anfangtitle, $endtitle-$anfangtitle);
                                /*if (is_writable($handle_filedir)) {
                                        fwrite($handle_filedir, '$index->assign("$title", $tmp_dir);\n?>');
                                }*/
                        //}
                        
                        $title = '$index->assign("$title", \''.$tmp_title.'\');';
                        
                        // Inhalt auslesen und schreiben
                        //while(strpos($string,'<!--content-->', $offset)!==false){

                                $anfang=strpos($string,'<!--content-->', $offset)+16;
                                $ende=strpos($string,'<!--EndeAuslesen!-->',$offset)-70;
                                
                                $tmp_inhalt=substr($string, $anfang, $ende-$anfang);
                                /*if (is_writable($handle_filedir)) {
                                        fwrite($handle_filedir, '$index->assign("$content",$inhalt);');
                                }*/
                        //}
                        
                        $inhalt = '$index->assign("$content", \''.$tmp_inhalt.');\'';
                        
                        $beginn = '<?php
                        require_once("smarty/Smarty.class.php"); // Smarty includen
                        $index=new Smarty; // Ein neues Smartyobjekt erzeugen
                        ';
                        
                        fwrite($handle_filedir, utf8_encode($beginn.$title.$inhalt));
                        
                        //Datei schliessen                        
                        fclose($handle_filedir);
                        
                        // Offset auf Ende setzen
                        $offset=$ende;
                        //
                }
}
        
        get_dir(".", "");
 ?>
 </body>
 </html>

Gruesse aus Japan
Soeren
 
evtl utf encode? evtl anderen zeoichensatz nutzn für die japanischen zeichen?
 
Die Website an sich ist UTF-8 codiert.

Wnd mit der Function utf8_encode() soll mir der Inhalt korrekt in die Datei gespeichert werden.

Wie man unten sieht wird mir die Datei noch nichtmal komplet abgespeichert sondern es wird aus einem mir unbekannten Grund mitem im Script abgebrochen und die naechste Datei wird geschrieben.

Aussehen tut die Datei z.B. so:
Code:
<?php
			require_once("smarty/Smarty.class.php"); // Smarty includen
			$index=new Smarty; // Ein neues Smartyobjekt erzeugen
			$index->assign("$title", 'Â?Â???Â?Â???Â?Â???Â?Â???Â?Â￾??Â?¤??Â?Â???Â?Â???Â? ??Â?Â???Â?Â???Â?Â? - ??Â?Â?');$index->assign("$content", '    			<table width="660px;" border="0" cellspacing="0" cellpadding="0">
                    <tr>
                        <td align="left" valign="top">
                            <div>??Â?Â???Â?Â???Â?Â???Â?Â???Â￾Â???Â?Â???Â?Â?(?¤Â?Â??¤Â?°??Â?Â???¸Â???Â?Â???Â?Â???Â￾Â???Â?Š??Â￾Â???Â￾Â???Â?Â???Â￾Â???Â￾Â???Â￾Â??§Â?Â???Â￾Â???Â?¨??Â?Â???Â￾§??Â￾Â???Â?Â?<br />??Â?Â???Â?Â???Â?Â??§Â?Â???Â￾Â???Â?Â???Â?Â???Â￾Â???Â?Â￾??Â? ??Â?Â???Â?Â￾??Â?Â???Â?Â￾??Â?´??Â?¤,??Â?Â??? Â???Â￾Â???Â￾Â???Â?Š??Â￾Â???Â￾Â???Â?Â?</div>
                            <div class="jap-house_housename">belief - ?¤Â?Â??¤Â?°</div>
                            <div>
                            	<ul>
                                    <li>??Â?¨??Â?Â???Â?š??Â?Â???Â?Â???Â?Â??§Â?Â?</li>
                                    <li>??Â? ??Â?Â???Â?Â￾??Â?Â?(??Â?Â??¨Â?Â???Â?Â???Â?Â￾?¨Â?Â??§Â￾Â???Â?¨??Â?Â???Â?Â￾??Â?Â???Â?¨?§Â Â?)</li>
                                    <li>??´Â???Â￾Â???Â?Â???Â?Â￾??Â?´??Â?¤ (??Â?Â???Â?Â???Â?Â???Â?Â?)</li>
                                    <li>??´�??��??��</li>
                                </ul>
                            </div>
                        </td>
                        <td align="right">
                            <div class="jap-house_topimg"><a href="../img/pics/japhouse_small.jpg" rel="lightbox[japhouse]" title="Japanese Style House Believe"><img src="../img/pics/japhouse_small.jpg" width="300" height=);'
 
Zu dem Problem mit den zeilenumbrüchen:
PHP:
fwrite($handle_filedir, '$index->assign("$title", $tmp_dir);\n?>');
Kann sein, dass doppelte Anführungsstriche verwendet werden sollten("), weil \n in einfachen(') ausgeschrieben wird.

Vergleiche:
PHP:
echo 'Hallo\nWelt!';
//Result: Hallo\nWelt!
echo "Hallo\nWelt!";
//Result: Hallo
//Welt!
 
Ja, es lag an den Anfuerhungszeichen das es PHP den Zeilenumbruch nciht erkannt hat.

Wie ich das ganze jedoch in utf-8 abspeichern kann habe ich immer noch nicht herrausgefunden.
 
Zurück
Oben