Ergebnis 1 bis 20 von 104

Thema: Der 'große' PHP-Thread

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Ein Tab ist ein Zeichen, allerdings hat die Schriftart nichts damit zu tun, wie es angezeigt wird... Ansonsten müßte bei Monospace-Schriftarten ein Tab genau so lang sein wie Space; es ist aber zwischen vier- und achtmal so lang.
    Das Tab-Zeichen wird immer interpretiert. Wie es interpretiert wird hängt von der Umgebung ab (und von der Einstellung, KWrite erlaubt beispielsweise beliebigt Breiten für Tab).

  2. #2
    Ich habe ein kleines Problem. Ich will eine Html-Datei auslesen, aber nicht komplett, sondern nur den Javascript-Teil. Anschließend soll das Ganze an den Browser geschickt werden (sprich: ich will den Html-Teil rausfiltern). Mein Php-Code:
    PHP-Code:
    <?php

    $file 
    file('test.html''r');
    $ttt false;
    foreach(
    $file as $i){
        if(
    $i == "<script language=\"javascript\">"){
            
    $ttt true;
        }
        if(
    $ttt){
            echo 
    $i;
        }
        if(
    $i == "</script>\n"){
            
    $ttt false;
        }
    }
    ?>
    Die Funktionsweise dürfte grunsätzlich klar sein: die Datei wird in ein Array gelesen. Anschließend wird durch das Array iteriert. Wenn der Scriptteil beginnt, wird $ttt auf true gesetzt. Anschließend wird die aktuelle Zeile ausgegeben, falls man im Scriptteil ist. Zu guter letzt wird überprüft, ob der Scriptteil beendet ist, und falls ja, $ttt wieder auf false gesetzt.

  3. #3
    @ masterquest:
    Ich glaube das lässt sich über Reguläre Ausdrücke noch besser bewerkstelligen. Nur hab ich mich bisher nie an die RegExp's rangetraut. Interessieren, wie die Lösung damit aussieht, würde mich allerdings auch.
    Vielleicht gibts hier ja Leute die das hinbekommen.
    Dann aber bitte den RegExp-Anteil ordentlich ausdokumentiert.

  4. #4
    Mit den regulären Ausdrücken hat's geklappt.
    ich habe die if-Abfragen durch folgenden Code ersetzt:
    PHP-Code:
    #if($i == "<script> language=\"javascript\">"){
    #ersetzt mit
    if(ereg('^(<script language="javascript">){1}'$i)){

    #if($i == "</script language="javascript">"){
    #ersetzt mit
    if(ereg('^(</script language="javascript">){1}'$i)){ 
    Der entsprechende reguläre Ausdruck lautet '^(<script language="javascript"){1}'. Im Prinzip ist das ganz einfach:
    das '^' steht dafür, dass der gesuchte String mit dem angegebenen String beginnen muss. Der angegebene String ist in diesem Fall '(<script language="javascript"){1}'. Das bedeutet, dass die Zeichenkette '<script language="javascript"' exakt einmal autreten darf. Sprich: Der Ausdruck überprüft, ob der String mit '<script language="javascript">' beginnt.
    Ich hoffe, das war einigermaßen verständlich, ich hab's nämlich auch noch nicht zu 100% verstanden

  5. #5
    Bei </script> muss kein language="" hin. .

  6. #6
    Ich würde es mit explode machen:
    PHP-Code:
    <?php
    $file 
    file('test.html''r');
    $inhalt implode($file);
    $temp explode('<script language="javascript">'$inhalt);
    $temp2 explode('<script language="javascript">'$temp[1]);
    echo 
    $temp2[0];
    ?>
    Diese Methode könnte man mit einer Schleife auch wiederholen

  7. #7
    Ifs sind zwar nett, aber es geht nichts über ein einfaches preg_match_all(). BTW, meine Version erkennt sowohl die alte Version mit language="" als auch die neue mit type="".
    PHP-Code:
    <?

    $string = "<bla></bla><script type=\"JavaScript\">Skript!</script>dfgdfg<script language=\"JavaScript\">Skript mit\nmehreren Zeilen!</script>fd<dh />";

    $pattern = "/(<script.*(type|language).*=\"JavaScript\".*>.*<\/script>)/isU";

    preg_match_all ($pattern, $string, $result);

    print_r ($result[0]); // dieses Array enhält fertig alle Skripte.

    ?>

  8. #8
    @ Jesus_666:
    Erklärst du uns... vor allem mir, eben den Regulären Ausdruck?
    Der Nachteil an den meisten Tuts ist nämlich die mangelnde Praxisbezogenheit im RegExp-Bereich. ¬_¬

    Man Dankt schonmal.

  9. #9
    Daß ich den mal eben so aus dem Ärmel geschüttelt habe liegt wohl auch daran, daß ich heute schon den ganzen Tag mit den Dingern arbeite - IRC-Logs nach bestimmten Regeln in HTML umwandeln und dabei auch noch fehlertolerant zu sein kann ziemlich anstrengen...


    Also gut. /(<script dürfte soweit klar sein: Der Schrägstrich leitet den Ausdruck ein und die Klammer eine Gruppe (BTW, vielleicht kann man die Klammern auch weglassen).
    Bei Perl-Regexps steht der Punkt für ein beliebiges Zeichen und das Sternchen für "null mal oder öfter". Nach <script kommt also erst mal eine beliebige Zahl beliebiger Zeichen, bis wir beim nächsten Teil sind.
    (type|language) ist wieder eine Gruppe. Der Querstrich steht dafür, daß entweder das eine oder das andere vorkommen kann. Also wird hier entweder type oder language gefunden. Danach wieder beliebig viele beliebige Zeichen... Die könnte man sogar weglassen, da nach dem type/language ja immer gleich das Gleichheitszeichen kommt.
    ="JavaScript".*>.*<\/script> muß ich wohl nicht weiter erläutern. Klartext und ein paar beliebige Zeichenfolgen. Die zweite Zeichenfolge ist der gesamte Inhalt des Tags.
    /isU: wir schließen den Ausdruck ab und hängen noch ein paar Optionen hinten dran: i sorgt dafür, daß Groß- und Kleinschreibung ignoriert werden. Man weiß ja nie, wie die Seite geschrieben ist, die man gerade ausnimmt. s sorgt dafür, daß . auch bei Zeilenumbrüchen funktioniert. So kann man mit .* mehere Zeilen erfassen. U sorgt dafür, daß der Regexp nicht so gierig ist - normalerweise würde er versuchen, so viel Text wie möglich zu erfassen und dabei vom ersten <script bis zum letzten </script> alles als ein Ergebnis nehmen. U läßt den Regexp nur soweit greifen, wie er mindestens funktioniert.


    Und wenn ihr denkt, daß das Ding unübersichtlich war, dann seht euch mal dieses Prachtstück an:
    Code:
    /(\[)(\d\d:\d\d)(])(\s+)(&lt;)(\S+)(&gt;)(\s+)(\[)([^\n\r(\d\d:\d\d)\[\]]+?)(\])([^\n\r]*?)(.*)/U[
    So, jetzt wißt ihr, womit ich meinen Nachmittag verbracht habe. ^_^ (BTW, damit finde ich in den Logs meiner IRC-DSA-Runde OOC-Zeilen.)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •