Ankündigung

Einklappen
Keine Ankündigung bisher.

leer stellen löschen (ja ich habe gegoogelt)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • leer stellen löschen (ja ich habe gegoogelt)

    Hallo,
    ich habe mir eine kleine string_between function geschrieben
    PHP-Code:
    function string_between($content,$start,$end,$limit=10000000,$offset=0){
        for(
    $i=0;$i<$limit;$i++){
            if(!
    $startpos=strpos($content,$start,$offset)){return $string;}
            if(!
    $endpos=strpos($content,$end,$startpos)){return $string;}
            
    $ending=ltrim(substr($content$startpos+strlen($start), $endpos-($startpos+strlen($start)))," ");
            
    $string[$i]=$ending;
            
    $offset=$endpos;
        }
        return 
    $string;

    die function klappt soweit auch einwandfrei
    jetzt habe ich versucht das $string array tabellarisch auszulesen und mir ist aufgefallen, dass ich auch "leere" arrays einlesen
    diese leeren arrays werden in meiner tabelle als "Â" angezeigt ... leerzeichen im text werdena ber richtig als leerzeichen angezeigt
    -> per google habe ich herausgefunden, dass das was mit utf8 zu tun hat
    -> deshalb habe ich $string[$i]=$ending;in $string[$i]=utf8_encode($ending); geändert -> das hat zumindest bewirkt, dass das  als normales leerzeichen dargestellt wird ... aber mir will es einfahc nicht gelingen, dieses wegzukürzen
    hat jemand ne idee wie das gehen könnte? var_dump gibt mir [26]=> string(2) " "
    MfG Lukas

  • #2
    (ja ich habe gegoogelt)
    Solche Hinweise bitte knicken (vor allem im Threadtitel). Diese haben keinen Mehrwert.

    Was ist eine
    string_between function
    ?

    Kommentar


    • #3
      oh k dachte das wäre durch den namen ersichtlich
      die function soll aus einem string, den string zwischen 2 strings heraussuchen und in einem array zurück geben
      --> aber wie gesagt das klappt eigentlich schon nur das mit den leerstellen geht nicht ltrim() und str_replace habe ich schon getestet auch eine if abfrage if($string[$i]==' ') zeigte kein ergebnis

      z.B.:
      $string="Hallo mein Name ist Knall!Hallo mein Auto ist rot!";
      $result=string_between($string,'mein','ist');
      //-> $result[0] wäre dann "Name"
      //$result[1] wäre "Auto"
      ähnliche functionen die das bewerkstelligen habe ich im netz zur genüge gefunden nur leider keine, die mehrere teilstrings ausließt und als array returnt

      MfG Lukas

      Kommentar


      • #4
        Ich könnte mir sehr gut vorstellen, dass du da mit einem regulären Ausdruck besser bedient bist.

        Kommentar


        • #5
          http://de.php.net/manual/de/function.preg-match-all.php

          Kommentar


          • #6
            ich würde ja als erstes das $string erstmal definieren ...

            PHP-Code:
            function string_between($content,$start,$end,$limit=10000000,$offset=0){
               
            $string=array();
            ... 
            danach bei der Ausgabe - teste ob count($string) mindestens 1 ist und mach im Else-Fall halt einfach "keine" Ausgabe

            Kommentar


            • #7
              hm naja ich glaub ich habe meine frage zu undeutlich gestellt und nicht genug informationen gegeben

              -> das einlesen und auslesen des arrays klappt einwandfrei
              angenommen ich möchte aus folgendem $string die zeien zwischen <td> und </td> einlesen (und bitte sagt mir jetzt nicht da gibts ne leichtere möglichkeit -> ich will das jetzt so hinbekommen :P)
              Code:
              <html>
              <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
              <td>hallo</td>
              <td> </td>
              <td>ich</td>
              <td>heiße</td>
              <td>lukas</td>
              </html>
              <- dieser html code steckt in meinem string $content
              PHP-Code:
              $pattern=array("/\t/","/\n/","/\r/","/\[]/");
              $content=preg_replace($pattern"",$content);
              $array=string_between($content,'<td>','</td>');
              // das $array enthält nun alle texte zwischen den td tags
              for($i=0;$i<count($array);$i++){
              if(
              $array[$i]!=' '){echo $i.':'.$array[$i].'<br>';}
              }
              auch das array $array[1wird ausgelesen ... warum

              Kommentar


              • #8
                und bitte sagt mir jetzt nicht da gibts ne leichtere möglichkeit
                Tun wir aber: preg_match_all()

                Für den zuletzt genannten Fall genügt sogar: http://php.net/manual/de/book.dom.php

                Kommentar


                • #9
                  hmpf...
                  das weis ich mittlerweile
                  und warscheinlich werde ich das auch benutzen .. totzdem wüsste ich gerne wo mein fehler war um ihn nich zu wiederholen
                  es kann ja eigentlich nicht sein, dass das so probleme bereitet ...
                  ist es normal, dass EIN leerzeichen ne stringlänge von string(2) " " hat?
                  MfG Lukas

                  Kommentar


                  • #10
                    Sind vielleicht deine Eingabewerte in UTF-8?

                    Dann würde ich zu mb_strpos raten.

                    http://php.net/manual/de/function.mb-strpos.php

                    Weil das Ä ist in UTF-8 2 Bytes groß womit dein substr mit falschen Positionsangaben arbeitet wenn du nur strpos verwendest. strpos zählt das Ä als 1 Byte, d.h. du zerlegst das UTF-8 Ä und bekommst an beiden Schnittkanten des Strings Müll.

                    Kommentar


                    • #11
                      der tip war gut
                      mein header war auf utf-8 und der des eingelesenen auf iso -> hab jetzt bei beiden iso gesetzt und das eklige  ist verschwunden -> stattdessen wird jetzt ein normales leerzeichen(so soll es ja auch sein) angezeigt und der string ist nur noch EIN zeichen lang

                      das andere problem allerdings bleibt:
                      if($sting[$i]==' ') wird nicht aktiv
                      und wenn ich das ganze mit strcmp($string[$i],' ') bekomm ich 1 als antwort ->$sting[$i] ist länger
                      wenn ich per strlen() $sting[$i] und ' ' abfrage bekommich für beide den wert 1

                      ich hab schon überlegt, dass es daran liegt, das ich ein array mit einem sting vergleiche, aber wenn ich $test=$string[$i] benutze komm ich zum gleichen ergebnis

                      MfG Lukas

                      edit: hab es auch schon mit den mb funktionen versucht
                      mir ist aufgefallen, dass wenn ich die strings wieder utf8_encode()
                      der leerstring aus der eingabe wieder zu string(2) "Â " wird -> deswegen denke ich, dass die eingabe doch in uft8 oder was auch immer ist .. aber im header steht iso .. wie kann ich das überprüfen?

                      Kommentar

                      Lädt...
                      X