Ankündigung

Einklappen
Keine Ankündigung bisher.

Fread and mb_stripos

Einklappen

Neue Werbung 2019

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

  • Fread and mb_stripos

    Hey,
    Ich versuche zur Zeit den Anfang eines Strings zu entfernen. Der ist jedes Mal zufällig und beginnt mit BE und endet mit einem umlaut-y. Daher wollte ich zunächst die Position des y auslesen, +1 rechnen und dann die variable kürzen.

    Beispielanfang:
    PHP-Code:
    BE¶9R ÿb52 
    Meines Code sieht wie folgt aus:


    PHP-Code:
    $newtext fread($rcon102400);
    $offset mb_stripos($newtext'ÿ'); 
    Leider liefert $offset nur jedes mal false.. Obwohl ÿ vorhanden ist. Jetzt dachte ich, dass $newtext vielleicht in einem anderen Format geliefert wird oder so..
    Alle meine Tests liefen jedoch ins leere..

    Ich habe mal den $newtext mit var_dump ausgeben lassen:

    PHP-Code:
    string(405"BE¶9R ÿb52118f75da73b948a(OK) [UPR] Lexem
    12  79.246.30.236:2304    16   e3d80493828c61d203e0bfc34a2e801e(OK) [NTE]-Basti2508
    13  95.91.219.122:34780   15   c0acdf3fb9f56a98ea0565169be57ab9(OK) [CoN]PrinzFrederic
    14  80.132.155.179:2304   31   281adfabcf60bee6c312bd45ff61f9ed(OK) [DFG]iCerth
    17  89.246.60.55:60995    16   7b44e9d4724f62c3a2f439ff72be517f(OK) [DFG-L.]FIoRunner
    (16 players in total)" 
    Vielen Dank für die Hilfe!


  • #2
    Du solltest dein Code als UTF-8 ohne BOM speichern und dein $offset so ermitteln:
    PHP-Code:
    $offset mb_stripos($newtext'ÿ',0,'UTF-8'); 
    Klappt das nicht, lass dir dein String mal hexadezimal ausgeben. Oder ist der benutzte Zeichensatz bekannt?
    PHP-Klassen auf github

    Kommentar


    • #3
      Es funktioniert leider nicht.
      Ich hoffe ich habe das richtig gemacht:
      Code:
      string(319) "424596fffaa9ff10021376132653766326239613863353132656539313561633930666637284f4b29204c696c615b5361755d20a3133202039302e3134362e3231352e31303a323330342020202033312020203461353232353166383537326639646431383539663137313165333035653461284f4b29205b464c5d2044615f53617565726b72617574a28313320706c617965727320696e20746f74616c29"

      Kommentar


      • #4
        Dann hast du offenbar ein Zeichensatzproblem. Schon das dritte Zeichen "¶" (Pilcrow Sign) hat (in UTF-8 ) einen anderen Hex-Wert.

        Woher kommt denn der String? Kennst du den Zeichensatz?

        Kommentar


        • #5
          Moin. Der obere Hex-Code ist nicht passend zu dem Beginn am Anfang. Der Anfang ist immer zufällig. Ich habe jetzt hier nochmal zwei passende angehängt:

          Code:
          string(786) "42453e862829ff1002130653863333233303331383937353430346232346536284f4b29205b77505d204cc3bc6d6d656c6e617365a3132202038352e3231362e38392e3133383a323330342020202031352020203234623436376132653766326239613863353132656539313561633930666637284f4b29204c696c615b5361755d20a3133202039302e3134362e3231352e31303a323330342020202033312020203461353232353166383537326639646431383539663137313165333035653461284f4b29205b464c5d2044615f53617565726b72617574a313420203231372e38342e31332e35343a32333034202020202034372020203435363935366431343938303934363035376534653934643433653764373037284f4b29204f72656d696fa3136202038342e3139302e3233362e3232313a3233303420202034372020203134646539613564353437333562323335396431353131643739636164623035284f4b29205b77505d204b6e61707065a28313620706c617965727320696e20746f74616c29"

          Kommentar


          • #6
            Warum auch immer kann ich das nicht in einem posten:

            Den String kann ich leider nicht schreiben. Denke der wird hier escaped..
            Habe ihn bei pastebin geschrieben:

            Außerdem mein Code:


            Vielen Vielen Vielen Dank schonmal für die Hilfe !

            Kommentar


            • #7
              Deine strToHex() taugt nichts. Du mußt schon für jedes Byte zwei Zeichen spendieren.
              Nimm mal diese hier:
              PHP-Code:
                function strhex($s){
                    return 
              $s != '' '\\x'.implode('\\x',str_split(bin2hex($s),2)) : '';
                } 
              und zeige den Text dazu den du mit var_dump erhältst.
              Setzt du ein charset per header ?
              PHP-Klassen auf github

              Kommentar


              • #8
                Nein einen Charset setzte ich nicht.

                Code:
                string(4144) "\x42\x45\x3e\x28\xc9\xf3\xff\x01\x00\x00\x03\x01\x38\x30\x38\x33\x37\x61\x63\x63\x30\x65\x30\x38\x33\x39\x63\x38\x35\x61\x33\x31\x28\x4f\x4b\x29\x20\x4a\x61\x6e\x0a\x31\x32\x20\x20\x38\x35\x2e\x32\x31\x36\x2e\x38\x39\x2e\x31\x33\x38\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x31\x36\x20\x20\x20\x32\x34\x62\x34\x36\x37\x61\x32\x65\x37\x66\x32\x62\x39\x61\x38\x63\x35\x31\x32\x65\x65\x39\x31\x35\x61\x63\x39\x30\x66\x66\x37\x28\x4f\x4b\x29\x20\x4c\x69\x6c\x61\x5b\x53\x61\x75\x5d\x20\x0a\x31\x33\x20\x20\x39\x32\x2e\x32\x35\x32\x2e\x31\x35\x2e\x32\x34\x36\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x33\x31\x20\x20\x20\x37\x38\x30\x38\x38\x64\x30\x32\x39\x61\x34\x35\x66\x61\x34\x31\x38\x33\x34\x30\x34\x39\x36\x62\x33\x30\x36\x66\x66\x30\x64\x34\x28\x4f\x4b\x29\x20\x5b\x4e\x54\x45\x5d\x20\x48\x65\x6c\x6d\x75\x74\x0a\x31\x34\x20\x20\x32\x31\x37\x2e\x38\x34\x2e\x31\x33\x2e\x35\x34\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x20\x34\x37\x20\x20\x20\x34\x35\x36\x39\x35\x36\x64\x31\x34\x39\x38\x30\x39\x34\x36\x30\x35\x37\x65\x34\x65\x39\x34\x64\x34\x33\x65\x37\x64\x37\x30\x37\x28\x4f\x4b\x29\x20\x4f\x72\x65\x6d\x69\x6f\x0a\x31\x35\x20\x20\x37\x39\x2e\x32\x35\x35\x2e\x31\x31\x38\x2e\x35\x38\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x31\x36\x20\x20\x20\x39\x34\x39\x31\x66\x35\x31\x38\x32\x35\x32\x65\x33\x38\x31\x35\x32\x64\x37\x32\x35\x37\x35\x36\x34\x34\x33\x33\x37\x38\x39\x39\x28\x4f\x4b\x29\x20\x44\x61\x44\x75\x64\x65\x0a\x31\x36\x20\x20\x31\x38\x38\x2e\x31\x30\x38\x2e\x31\x32\x30\x2e\x32\x31\x38\x3a\x32\x33\x30\x34\x20\x20\x33\x31\x20\x20\x20\x61\x66\x30\x37\x32\x30\x64\x34\x39\x35\x62\x36\x62\x32\x64\x36\x36\x64\x64\x39\x32\x38\x62\x63\x62\x35\x32\x62\x33\x37\x63\x37\x28\x4f\x4b\x29\x20\x5b\x72\x45\x44\x5d\x20\x4b\x65\x76\x0a\x31\x37\x20\x20\x37\x39\x2e\x32\x32\x34\x2e\x35\x32\x2e\x31\x30\x39\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x33\x32\x20\x20\x20\x38\x30\x63\x36\x30\x64\x32\x62\x39\x39\x35\x35\x65\x66\x63\x61\x33\x32\x35\x63\x34\x31\x63\x65\x32\x37\x38\x35\x66\x36\x33\x37\x28\x4f\x4b\x29\x20\x53\x63\x6f\x72\x63\x68\x0a\x31\x38\x20\x20\x33\x37\x2e\x32\x34\x2e\x31\x35\x37\x2e\x34\x34\x3a\x36\x32\x30\x30\x32\x20\x20\x20\x20\x33\x31\x20\x20\x20\x64\x39\x35\x63\x36\x37\x65\x37\x32\x66\x33\x65\x36\x31\x33\x34\x30\x33\x61\x39\x32\x63\x61\x37\x64\x62\x32\x62\x32\x37\x37\x63\x28\x4f\x4b\x29\x20\x53\x6e\x61\x6b\x65\x0a\x31\x39\x20\x20\x39\x35\x2e\x39\x31\x2e\x32\x34\x39\x2e\x32\x35\x3a\x35\x34\x32\x32\x36\x20\x20\x20\x20\x31\x36\x20\x20\x20\x37\x65\x35\x36\x39\x34\x33\x36\x31\x66\x32\x63\x37\x65\x65\x65\x39\x36\x34\x62\x62\x39\x38\x37\x31\x33\x33\x61\x64\x34\x62\x32\x28\x4f\x4b\x29\x20\x50\x72\x6f\x73\x74\x0a\x32\x30\x20\x20\x38\x38\x2e\x31\x35\x33\x2e\x36\x2e\x31\x37\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x20\x20\x33\x31\x20\x20\x20\x37\x64\x33\x64\x61\x36\x37\x38\x64\x34\x32\x30\x32\x33\x35\x34\x37\x30\x65\x66\x31\x34\x30\x33\x33\x35\x64\x30\x63\x31\x61\x62\x28\x4f\x4b\x29\x20\x53\x68\x69\x76\x61\x69\x0a\x32\x31\x20\x20\x38\x38\x2e\x36\x35\x2e\x32\x33\x38\x2e\x32\x32\x32\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x31\x36\x20\x20\x20\x34\x61\x66\x33\x61\x36\x65\x36\x35\x31\x34\x35\x30\x33\x66\x37\x31\x64\x39\x66\x66\x66\x33\x65\x37\x62\x62\x30\x37\x64\x33\x65\x28\x4f\x4b\x29\x20\x43\x79\x62\x65\x72\x73\x74\x6f\x72\x6d\x58\x6f\x0a\x32\x32\x20\x20\x39\x31\x2e\x36\x2e\x31\x35\x2e\x31\x32\x34\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x20\x20\x36\x33\x20\x20\x20\x33\x30\x39\x30\x65\x64\x31\x37\x30\x63\x34\x35\x30\x34\x37\x35\x39\x32\x32\x33\x34\x31\x32\x37\x32\x37\x35\x62\x61\x30\x37\x61\x28\x4f\x4b\x29\x20\x5b\x72\x45\x44\x5d\x20\x54\x65\x72\x72\x6f\x72\x63\x61\x74\x0a\x32\x33\x20\x20\x33\x37\x2e\x32\x30\x31\x2e\x37\x39\x2e\x38\x34\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x20\x31\x36\x20\x20\x20\x63\x64\x61\x35\x38\x66\x39\x32\x38\x64\x63\x61\x33\x64\x39\x31\x31\x36\x38\x38\x38\x34\x66\x31\x62\x64\x63\x64\x63\x61\x66\x37\x28\x4f\x4b\x29\x20\x4b\x61\x73\x61\x69\x0a\x32\x34\x20\x20\x33\x37\x2e\x35\x2e\x32\x33\x31\x2e\x31\x37\x32\x3a\x32\x33\x30\x34\x20\x20\x20\x20\x20\x31\x36\x20\x20\x20\x36\x63\x62\x38\x30\x36\x30\x66\x32\x35\x34\x64\x33\x31\x66\x66\x32\x38\x31\x61\x63\x38\x34\x34\x35\x34\x34\x35\x63\x66\x66\x35\x28\x4f\x4b\x29\x20\x5b\x55"
                Und den Anfangscode dazu:
                BE>(Éóÿ80837

                Kommentar


                • #9
                  Ist jetzt xff das ÿ? Sodass ich einfach die ersten 21 Zeichen raushauen kann?

                  Also das ich das so mache:

                  Empfangenen text zu hex -> erste 21 zeichen raushauen -> wieder zu str

                  Kommentar


                  • #10
                    Zitat von orgertot Beitrag anzeigen
                    Nein einen Charset setzte ich nicht.
                    Solltest du aber unbedingt tun! Wie ist deine Seite gespeichert (ANSI, UTF-8 )?

                    Wenn du feststellst, daß dein ÿ (\xff) im Hexdump immer an der 7. Stelle steht, dann kannst du die ersten Bytes einfach abschneiden.
                    PHP-Klassen auf github

                    Kommentar


                    • #11
                      UTF8.. Aber bevor ich den Text ausgebe benutze ich utf8_decode().. Müsste ja eigl. für die Anzeige reichen und für die restliche Verarbeitung müsste es ja dann relativ un relevant sein
                      Ich denke mal schon hehe. Hättest du denn noch eine Funktion die den Hex wieder in Str umformt?

                      Vielen Vielen Vielen Vielen Dank bis jetzt! Du hast mir wirklich sehr geholfen. Ich versuche das schon seit Wochen hinzubiegen!

                      Kommentar


                      • #12
                        Mein Tipp: Kein Zeichensatzchaos, sondern arbeite konsequent mit UTF8:

                        Zitat von Aus PHP.de Beiträgen
                        Nutze konsequent UTF-8. Kurze Checkliste für UTF-8 und Umlautprobleme:
                        - HTTP Header Content-Type mit UTF-8
                        - in HTML-Seiten <meta http-equiv="content-type" content="text/html; charset=utf-8" />
                        oder <meta charset="utf-8"><!-- HTML5 -->
                        sollte idealerweise als Erstes, gleich nach dem einleitenden head-Element erfolgen
                        - PHP und HTML/Template Dateien im Editor als "UTF-8 ohne BOM" speichern
                        - Formulardaten in UTF-8 übergeben (ggf. mit accept-charset="utf-8" sicherstellen)
                        - Datenbank Zeichensatz UTF-8, Tabellenkollationen utf8_general_ci o.Ä.
                        - Datenbankverbindung von PHP zu MySQL auf UTF-8 stellen
                        - Daten aus Fremdquellen müssen in UTF-8 überführt werden, wenn sie nicht als UTF-8 vorliegen
                        utf8_encode: ISO-8859-1-Zeichenkette -> UTF-8

                        - htmlentities codierung mitgeben, Beispiel: htmlentities($info,ENT_NOQUOTES,'UTF-8');
                        - für deutsche Monatsnamen wie März ist u.U. setlocale(LC_TIME, "de_DE.utf8") notwendig
                        Der Zeichensatz deines Strings den du holst ist vermutlich ISO 8859-1 oder ein naher Verwandter. Das ist eine UTF-8 Fremdquelle, überführe diese in UTF-8.
                        Dann funktioniert auch mein obiger Code mit mb_stripos.
                        Oder du bereinigst deinen String vor der Überführung mit substr, falls dein ÿ sich im Orginal immer an der 7. Stelle befindet.
                        PHP-Klassen auf github

                        Kommentar


                        • #13
                          Okay! Wird gemacht! Dankeschön!

                          Aber hättest du noch die HexToStr Funktion für mich? Also das zum Umwandeln?

                          Danke

                          Kommentar


                          • #14
                            Wozu? und von welcher Darstellung? Meine ?
                            PHP-Klassen auf github

                            Kommentar


                            • #15
                              Ja.
                              Damit ich den Hex Code wieder umwandeln kann ich normalen Text

                              Kommentar

                              Lädt...
                              X